docker構建并啟動前端

docker文件示例代碼:

# Use a minimal image for development
FROM node:18-alpine# Set working directory inside the container
WORKDIR /app# Copy package.json and package-lock.json (or yarn.lock) into the container
COPY package.json package-lock.json* ./# Install the app dependencies with --legacy-peer-deps to bypass the peer dependency conflict
RUN npm install --legacy-peer-deps# Copy the rest of the application files into the container
COPY . .# Expose the port the app will run on
EXPOSE 3000# Start the Next.js app in development mode
CMD ["npm", "run", "dev"]

這段 Dockerfile 用于構建一個基于 Node.js 18 Alpine 版本的容器,并運行一個 Next.js 應用。


逐行解析

1. 選擇基礎鏡像

FROM node:18-alpine
  • 使用 node:18-alpine 作為基礎鏡像,alpine輕量級 Linux 版本,比 node:18 體積更小,減少 Docker 鏡像的大小。

2. 設置工作目錄

WORKDIR /app
  • 容器內 創建 /app 目錄,并把它作為 當前工作目錄
  • 之后的所有操作都會在 /app 目錄下執行。

3. 復制 package.jsonpackage-lock.json

COPY package.json package-lock.json* ./
  • 只復制 package.jsonpackage-lock.json,避免不必要的文件影響 npm install 緩存。
  • package-lock.json* 這樣寫是為了:
    • 兼容 package-lock.jsonpackage-lock.json.gz(如果存在)。

4. 安裝依賴

RUN npm install --legacy-peer-deps
  • npm install 安裝 Node.js 依賴
  • --legacy-peer-deps 選項用于:
    • 跳過 peerDependencies(依賴版本沖突時不報錯)
    • 適用于 舊項目或有沖突的依賴

5. 復制項目代碼

COPY . .
  • 復制 本地所有文件容器的 /app/ 目錄
  • 這里 不會重復安裝依賴,因為 npm install 早就運行過了。

6. 開放端口

EXPOSE 3000
  • 這個 只是聲明 容器會使用 3000 端口,但默認不會讓外部訪問。
  • 真正讓外部訪問時,需要 -p 參數
    docker run -p 3000:3000 my-next-app
    
    這樣才能 映射端口,讓瀏覽器訪問 http://localhost:3000

7. 運行 Next.js 應用

CMD ["npm", "run", "dev"]
  • 容器啟動時執行 npm run dev,即 開發模式運行 Next.js
  • 這個命令等價于:
    npm run dev
    
    • dev 腳本通常在 package.json 里:
      "scripts": {"dev": "next dev"
      }
      
    • Next.js 開發服務器會在 localhost:3000 運行

完整流程

  1. 基于 node:18-alpine 創建一個容器
  2. /app 目錄下工作
  3. 復制 package.json 并安裝依賴
  4. 復制整個項目代碼
  5. 暴露 3000 端口
  6. 運行 npm run dev 啟動 Next.js 服務器

如何使用

1. 構建鏡像

docker build -t my-next-app .

2. 運行容器

docker run -p 3000:3000 my-next-app

然后在瀏覽器訪問:

http://localhost:3000

如果一切正常,你會看到 Next.js 應用的頁面!🚀

設置工作目錄,所有操作都會在 /app 目錄下執行。當前app目錄下沒有內容吧,那怎么復制 package.json 和 package-lock.json

WORKDIR /app 之后,/app 目錄雖然存在,但還是空的。

但是,Docker COPY 命令不會受這個影響,它會從宿主機(你的電腦)復制文件到 /app 目錄下。


詳細流程

WORKDIR /app
COPY package.json package-lock.json* ./

🔹 第一步:WORKDIR /app

  • 這會 切換到 /app 目錄,如果 /app 目錄不存在,Docker 會自動創建它

🔹 第二步:COPY package.json package-lock.json* ./

  • COPY 命令會從 宿主機(你的電腦)當前目錄 復制 package.jsonpackage-lock.json/app 目錄下。
  • ./ 代表目標路徑是 當前目錄,因為 WORKDIR /app 已經切換到 /app,所以 ./ 實際上就是 /app/

舉個例子

假設你的 項目目錄 結構如下:

/my-project├── Dockerfile├── package.json├── package-lock.json├── src/├── pages/└── node_modules/

你在 /my-project 目錄下運行:

docker build -t my-next-app .

Docker 執行過程:
1?? WORKDIR /app → 在容器內創建并切換到 /app
2?? COPY package.json package-lock.json* ./ → 把 package.jsonpackage-lock.json 復制到 /app/
3?? RUN npm install --legacy-peer-deps → 在 /app/ 里安裝依賴
4?? COPY . . → 復制 所有剩余文件(比如 src/pages/


總結

  • WORKDIR /app 只是 切換工作目錄,不影響后續 COPY
  • COPY package.json package-lock.json* ./ 復制 package.jsonpackage-lock.json/app/
  • COPY . . 復制所有剩余文件
  • 這樣可以 優化緩存,加快構建速度 🚀

如果還是不懂,那就先理解下面的內容。。

COPY package.json package-lock.json ./ 這行代碼的意思

COPY package.json package-lock.json* ./

它的作用是:
👉 從宿主機(你的電腦)復制 package.jsonpackage-lock.json 到 Docker 容器的 /app/ 目錄下。


拆解解釋

COPY package.json package-lock.json* ./
  • package.json package-lock.json*要復制的文件(來自你的 本地電腦
  • ./目標路徑(容器內的 /app/

為什么 ./ 代表 /app/

因為 之前已經有 WORKDIR /app

WORKDIR /app
COPY package.json package-lock.json* ./
  • WORKDIR /app當前工作目錄 變成 /app
  • COPY package.json package-lock.json* ./ 里的 ./ 指的是 當前工作目錄
  • 所以 ./ 實際上等同于 /app/

相當于:

COPY package.json package-lock.json* /app/

舉個例子

假設你的 宿主機(電腦)的項目目錄

/my-project├── Dockerfile├── package.json├── package-lock.json├── src/├── pages/└── node_modules/

當你運行:

docker build -t my-next-app .

Docker 會執行:
1?? WORKDIR /app → 現在 /app 是容器內的工作目錄
2?? COPY package.json package-lock.json* ./ → 復制 package.jsonpackage-lock.json/app/ 目錄
3?? RUN npm install --legacy-peer-deps → 在 /app/ 里安裝依賴
4?? COPY . . → 復制 剩下的所有文件(比如 src/pages/


總結

? ./ 代表 容器里的 /app/,因為 WORKDIR /app/app 成為了當前目錄
? COPY package.json package-lock.json* ./ 相當于 COPY package.json package-lock.json* /app/
? 先復制依賴文件再復制整個項目,是為了優化 Docker 緩存,加快構建速度 🚀

COPY . .是什么意思,為什么這里是兩個 ..

COPY . .

這條指令的作用是:
👉 把宿主機(你的電腦)的 當前目錄.)的 所有文件 復制到 容器內的當前目錄.)。

由于 WORKDIR /app 設定了工作目錄為 /app,所以 . 實際上是 /app/,最終效果是:
🚀 把宿主機的整個項目目錄復制到容器的 /app/ 目錄里


拆解解釋

COPY <源路徑> <目標路徑>
  • 第一個 .(源路徑):指的是 宿主機上的當前目錄(Docker 構建時的 Dockerfile 所在目錄)
  • 第二個 .(目標路徑):指的是 容器內的當前工作目錄WORKDIR /app 已經設置)

所以:

WORKDIR /app
COPY . .

等價于:

COPY . /app/

舉個例子

假設你的 本地項目目錄(宿主機)

/my-project├── Dockerfile├── package.json├── package-lock.json├── src/├── pages/├── node_modules/├── public/└── .gitignore

你運行:

docker build -t my-next-app .

Docker 執行過程
1?? WORKDIR /app切換到 /app/ 目錄(如果沒有,就創建它)
2?? COPY package.json package-lock.json* ./復制 package.jsonpackage-lock.json/app/
3?? RUN npm install --legacy-peer-deps安裝依賴
4?? COPY . .復制整個項目到 /app/,包括 src/pages/public/

最終容器內的 /app/ 目錄會變成:

/app├── package.json├── package-lock.json├── src/├── pages/├── node_modules/  (npm install 之后才有)├── public/├── .gitignore

這樣容器就擁有了完整的項目代碼,可以運行 Next.js 了!🎉


為什么要 COPY . .

? 把整個項目復制到容器內,保證 npm run dev 可以運行
? 必須在 npm install 之后執行,避免 node_modules/ 被覆蓋
? 確保 src/pages/ 這些代碼文件都能進入容器


總結

  • COPY . . 就是 COPY . /app/
  • 把宿主機(本機)的項目文件,復制到容器內的 /app/ 目錄
  • 必須在 npm install 之后執行,避免影響 node_modules/
  • 這樣容器就可以運行 Next.js 應用了 🚀

COPY . . → 復制整個項目到 /app/,包括 src/、pages/、public/ 等,這樣不就會重復復制前面已經復制過的文件了么,比如package.json package-lock.json

是的,COPY . . 確實會再次復制 package.jsonpackage-lock.json,但這不會影響構建結果,主要目的是 優化 Docker 構建緩存,加快構建速度。


為什么先 COPY package.json package-lock.json ./COPY . .

1?? 先單獨復制 package.jsonpackage-lock.json

COPY package.json package-lock.json* ./
RUN npm install --legacy-peer-deps

這樣做的好處:

  • Docker 會緩存 npm install 結果,下次構建時,如果 package.json 沒有改動,就不會重新安裝依賴,直接用緩存的 node_modules
  • 避免 npm installCOPY . . 之后的代碼改動影響(如果 src/ 里的文件改了,不影響 node_modules)。

2?? 再復制整個項目

COPY . .

這樣做的好處:

  • 確保 所有代碼文件(src/pages/public/)都能進入容器
  • 不影響 node_modules/ 緩存,因為 npm install 之前已經執行過了。

如果不先 COPY package.json,直接 COPY . . 會怎樣?

如果你只寫:

COPY . .
RUN npm install --legacy-peer-deps

問題在于:

  1. 每次項目代碼有一點改動(比如 src/ 文件變了),COPY . . 都會讓 Docker 重新執行 RUN npm install,導致浪費時間!
  2. npm install 需要很久,每次構建都會重新下載依賴,非常慢。

總結

? COPY package.json package-lock.json ./,讓 npm install 結果被緩存,加快構建
? COPY . .,確保所有代碼文件(src/pages/ 等)被復制
? 即使 package.json 被重復復制,也不會影響最終構建速度 🚀

為什么先 COPY package.json package-lock.json ./,可以讓 npm install 結果被緩存

Docker 構建時,會緩存每一層命令的結果,如果前面某一層的輸入沒有變,Docker 就不會重新執行它,而是直接用緩存。


🔹 Docker 的緩存機制

當你運行 docker build 時,Docker 會:

  1. 逐行讀取 Dockerfile
  2. 檢查每一層是否有變動
  3. 如果某一層和上次構建時相同,就復用緩存
  4. 如果某一層變了,后面的所有層都會重新執行(緩存失效)

🔹 舉個例子

? 沒有單獨復制 package.json,直接 COPY . .

# 設置工作目錄
WORKDIR /app# 直接復制整個項目
COPY . .# 安裝依賴
RUN npm install --legacy-peer-deps

🚨 這里的問題

  • COPY . . 會把 所有文件(包括 src/pages/public/)都復制到 /app/
  • 如果 src/ 里的代碼有改動,整個 COPY . . 就會變動
  • Docker 發現 COPY . . 變了,就會讓 npm install 重新執行,緩存失效
  • npm install 需要很長時間,每次構建都要重復下載依賴,太慢了!💥

🔹 ? 優化方法:先 COPY package.json package-lock.json ./

# 設置工作目錄
WORKDIR /app# 先復制 package.json 和 package-lock.json
COPY package.json package-lock.json* ./# 運行 npm install,并緩存 node_modules
RUN npm install --legacy-peer-deps# 復制剩下的所有文件
COPY . .

? 為什么這樣能加速構建?

1?? Docker 先執行 COPY package.json package-lock.json ./

  • 只復制 package.jsonpackage-lock.json,不會受 src/ 文件改動影響

2?? 然后執行 RUN npm install --legacy-peer-deps

  • 如果 package.json 沒變,Docker 直接復用上次構建的 node_modules
  • 跳過 npm install,節省時間!🚀

3?? 最后執行 COPY . .

  • 復制 src/pages/public/ 等代碼文件
  • 即使代碼變了,npm install 也不會重新執行

🔹 🚀 這樣做的結果

? 如果 package.json 沒變,Docker 直接復用 node_modules,構建速度快很多
? 即使 src/ 代碼變了,也不會觸發 npm install,不會浪費時間
? 整個構建流程更高效,省時省力 🎯


? 時間對比

方法構建時間(假設 npm install 需要 2 分鐘)
直接 COPY . .每次構建都要等 2 分鐘(因為 npm install 總是重新運行)
COPY package.json,再 COPY . .如果 package.json 沒變,構建只需要幾秒!

💡 這樣優化后,構建速度可以快 10 倍以上! 🚀

如果 Docker 關閉后重新啟動,還需要重新安裝依賴嗎?

? 如果你只是重啟 Docker(比如 docker stopdocker start),不需要重新安裝依賴,因為容器的文件系統還在,node_modules/ 也還在。

? 但是,如果你刪除了容器或構建了新鏡像,就需要重新安裝依賴!


🔹 分情況討論

? 1. 只是重啟 Docker

docker stop my-container  # 關閉容器
docker start my-container # 重新啟動
  • node_modules/ 還在,不需要重新安裝依賴
  • 應用可以直接運行
  • 適用于日常使用

? 2. 刪除容器后再啟動

docker rm my-container   # 刪除容器
docker run my-image      # 重新運行
  • 容器被刪除,所有文件(包括 node_modules/)都會丟失
  • 需要重新 npm install
  • 這時 Docker 會根據 Dockerfile 重新安裝依賴

? 3. 重新 docker build

docker build -t my-app .  # 重新構建鏡像
docker run my-app         # 運行新容器
  • 如果 package.json 沒變,Docker 可能會復用 npm install 的緩存
  • 如果 package.json 變了,npm install 會重新運行
  • 推薦使用 Docker Volume 來持久化 node_modules/(見下面的方法)

🔹 如何讓 node_modules/ 不丟失?(Docker Volume 持久化)

方法 1??:使用 docker-compose 綁定 node_modules 目錄

創建 docker-compose.yml

version: '3'
services:app:build: .volumes:- .:/app- /app/node_modulesports:- "3000:3000"

這樣即使你刪除容器,node_modules/ 也不會丟失。


方法 2??:手動掛載 Volume

運行容器時,使用 -v 選項:

docker run -v my-node-modules:/app/node_modules -p 3000:3000 my-app
  • 這樣 node_modules/ 會存儲在 Docker Volume 里
  • 即使你刪除容器,依賴也不會丟失

🔹 總結

情況是否需要重新安裝依賴?
僅重啟 Docker (docker stopdocker start)? 不需要,node_modules/ 還在
刪除容器后重新運行 (docker rm + docker run)? 需要,文件丟失
重新構建鏡像 (docker build)?? 可能需要,取決于 Docker 緩存
使用 Volume (-v 綁定 node_modules/)? 不需要,node_modules/ 保留在 Volume

? 推薦使用 Volume,這樣即使容器被刪,依賴也不會丟失 🚀

如果你關了電腦、退出了 Docker,下次啟動后還需要重新安裝依賴嗎?

? 大多數情況下,不需要重新安裝依賴!
如果你只是 關機、退出 Docker,再次啟動,你的 容器和 node_modules/ 依然會保留,不需要重新 npm install

如果你刪除了容器、清理了 Docker 數據,或者用了 --rm 運行容器,就需要重新安裝依賴!


🔹 具體情況分析

操作需要重新安裝依賴嗎?原因
關機后重新開機? 不需要Docker 會保留容器和 node_modules/
退出 Docker 后重新啟動? 不需要只要容器沒有被刪除,node_modules/ 還在
docker stop 停止容器,再 docker start? 不需要node_modules/ 還在,直接啟動即可
docker rm 刪除容器? 需要node_modules/ 被刪,需要重新安裝
docker build 重新構建鏡像?? 可能需要如果 package.json 沒變,可能會用緩存
docker run --rm 運行臨時容器? 需要--rm 讓容器退出時自動刪除,node_modules/ 會丟失

🔹 如何確保關機后 node_modules/ 不丟失?

? 方法 1:使用持久化 Volume

docker run -v my-node-modules:/app/node_modules -p 3000:3000 my-app

這樣 node_modules/ 會存儲在 Docker Volume 里,即使容器被刪除,依賴也不會丟失


? 方法 2:用 docker-compose 管理項目

創建 docker-compose.yml

version: '3'
services:app:build: .volumes:- .:/app- /app/node_modulesports:- "3000:3000"

然后啟動:

docker-compose up -d

這樣即使你重啟 Docker 或關機,node_modules/ 依然會保留。


🔹 總結

如果你只是關機、退出 Docker, 依賴不會丟失,開機后可以直接運行容器 🚀
但如果刪除了容器,就需要重新安裝 npm install

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73736.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73736.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73736.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

25大唐杯賽道一本科B組大綱總結(上)

25大唐杯省賽馬上要開始&#xff0c;還沒開始準備的要抓緊了 可看我之前發的備賽攻略&#xff0c;理論的準備要先將大綱整理成思維導圖框架 然后根據重點&#xff0c;在資料中尋找&#xff0c;記憶 這里幫大家整理好了&#xff0c;后續其他組別會相繼更新 基于競賽大綱做的思…

【Python3教程】Python3基礎篇之Lambda(匿名函數)

博主介紹:?全網粉絲22W+,CSDN博客專家、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物聯網、機器學習等設計與開發。 感興趣的可…

重試機制之指針退避策略算法

一、目的&#xff1a;隨著重試次數增加&#xff0c;逐步延長重連等待時間&#xff0c;避免加重服務器負擔。 二、計算公式&#xff1a; 每次重試的延遲時間 初始間隔 (退避基數 ^ 重試次數) 通常設置上限防止等待時間過長。 const delay Math.min(initialDelay * Math.pow…

SSE SseEmitter.completeWithError(e) 觸發的處理邏輯

在 Java 客戶端使用 OkHttp 監聽 SSE&#xff08;Server-Sent Events&#xff09; 的情況下&#xff0c;當服務端調用 SseEmitter.completeWithError(e)&#xff0c;客戶端會觸發 EventSourceListener 的 onFailure() 方法&#xff08;而不是 onError&#xff09;。 1. 服務端&…

4月手機新品前瞻,影像,性能與設計卷得起飛

在智能手機市場中,4月向來是新品頻發的黃金時段。各大手機廠商紛紛摩拳擦掌,準備推出自家的重磅機型,在影像、性能與設計等核心領域展開激烈角逐,一場沒有硝煙的“科技大戰”即將拉開帷幕。接下來,讓我們一同深入了解那些備受矚目的新品,提前感受科技進步帶來的魅力。 一…

設計審查效率革命|CAD原生數據直通自動公差驗證

“為何 90% 的 GD&T 問題在設計評審時未被發現&#xff1f;怎樣避免因 GD&T 考慮不周導致的批量返工&#xff1f;” 這正是 CETOL 自動輔助審查設計系統要解決的核心問題&#xff1a;通過200結構化審查規則攔截潛在設計疏漏。 功能一&#xff1a;裝配約束健康診斷&…

k8s scheduler幾種擴展方式的關系及區別

網上關于scheduler擴展介紹的文章很多&#xff0c;但都是東說一句西說一嘴&#xff0c;完全沒有邏輯性&#xff0c;對于邏輯建構者看著很痛苦&#xff0c;這篇文章不會深入教你怎么擴展&#xff0c;而是教你幾種擴展方式的關系和邏輯結構&#xff1a; 目前Kubernetes支持五種方…

近場探頭的選型

近場探頭包括磁場探頭和電場探頭。 下圖中畫圈的是電場探頭&#xff1a; 左側3只是磁場探頭&#xff0c;最右側一只是電場探頭。不同孔徑的磁場探頭的有效測量距離和分辨率不同 電場探頭和磁場探頭分別在什么情況下使用&#xff1a; 一般近場測試&#xff0c;使用的都是磁場探…

Pycharm運行時報“Empty suite”,可能是忽略了這個問題

問題&#xff1a;使用Pycharm運行testcases目錄下的.py文件&#xff0c;報“Empty suite”&#xff0c;沒有找到測試項。 排查過python解釋器、pytest框架安裝等等&#xff0c;依然報這個錯&#xff0c;依然沒找到&#xff0c;最后終端運行&#xff1a; pytest test_demo.py&a…

鴻蒙北向應用開發:deveco 5.0 kit化文件相關2

鴻蒙北向應用開發:deveco 5.0 kit化文件相關 在kit化時,有時候會出現這樣一種場景即你想把已有的d.ts導出換個名字,這樣從名字上更貼合你的kit聚合 什么意思呢?比如現在有 ohos.hilog.d.ts 導出了hilog,現在你想kit化hilog,使得hilog導出名字為usrhilog,這樣用戶在使用你的k…

《Python實戰進階》No37: 強化學習入門:Q-Learning 與 DQN-加餐版1 Q-Learning算法可視化

在《Python實戰進階》No37: 強化學習入門&#xff1a;Q-Learning 與 DQN 這篇文章中&#xff0c;我們介紹了Q-Learning算法走出迷宮的代碼實踐&#xff0c;本文加餐&#xff0c;把Q-Learning算法通過代碼可視化呈現。我嘗試了使用Matplotlib實現&#xff0c;但局限于Matplotli…

Linux 搭建dns主域解析,和反向解析

#!/bin/bash # DNS主域名服務 # user li 20250325# 檢查當前用戶是否為root用戶 # 因為配置DNS服務通常需要較高的權限&#xff0c;只有root用戶才能進行一些關鍵操作 if [ "$USER" ! "root" ]; then# 如果不是root用戶&#xff0c;輸出錯誤信息echo "…

GenBI 中如何引入 LLM 做意圖路由,區分查數據還是閑聊

寫在前面 生成式商業智能(Generative BI, GenBI)的魅力在于其能夠理解用戶的自然語言,并將復雜的數據查詢和分析過程自動化。用戶不再需要學習 SQL 或操作復雜的界面,只需像與同事交談一樣提出問題,就能獲得數據洞察。然而,一個現實的挑戰是:用戶的輸入并非總是明確的數…

OmniPlan Pro for Mac 項目管理流程

OmniPlan Pro for Mac 項目管理流程 文章目錄 OmniPlan Pro for Mac 項目管理流程一、介紹二、效果三、下載 一、介紹 OmniPlan Pro mac是一款項目管理流程軟件。能被用來優化資源、精簡預算快速共享或添加任務&#xff0c;旨在能夠幫助您可視化維護和簡化項目&#xff0c;包含…

人工智能之數學基礎:矩陣的相似變換

本文重點 矩陣的相似變換是線性代數中一個至關重要的概念,它揭示了矩陣之間的一種特殊關系,并通過可逆矩陣將一個矩陣轉化為另一個相似矩陣,同時保持矩陣的某些本質特征不變。在機器學習領域,矩陣的相似變換發揮著不可或缺的作用,廣泛應用于數據降維、聚類分析、分類推薦…

2025藍橋杯備賽Day12——P8598 [藍橋杯 2013 省 AB] 錯誤票據

&#x1f50d; 2025藍橋杯備賽Day12——P8598 [藍橋杯 2013 省 AB] 錯誤票據 &#x1f680; 題目速覽 題目難度&#xff1a;??&#xff08;適合掌握基礎字符串處理與數組操作&#xff09; 考察重點&#xff1a;輸入處理、數組排序、邏輯判斷 P8598 [藍橋杯 2013 省 AB] 錯…

3.28日,NBA,歐籃聯全掃盤,太陽VS森林狼

3.28日歐籃聯掃盤 301費內巴切 vs 巴斯克 (-10.5)&#xff0c;總分預設&#xff1a;170.5 背景&#xff1a;比賽于2025年3月28日在費內巴切的烏爾克體育館舉行&#xff0c;費內巴切為主隊。根據EuroLeague排名&#xff0c;費內巴切位列第二&#xff08;21勝10負&#xff09;&am…

【動態編譯】Roslyn中 SyntaxKind 枚舉類型

在 Roslyn&#xff08;.NET 的編譯器平臺&#xff09;中&#xff0c;SyntaxKind 是一個枚舉類型&#xff0c;定義了 C# 語言中所有可能的語法節點類型。它是 Roslyn 抽象語法樹&#xff08;AST&#xff09;的基礎&#xff0c;用于標識每個 SyntaxNode 的具體種類。SyntaxKind 的…

【SpringCloud】Eureka的使用

3. Eureka 3.1 Eureka 介紹 Eureka主要分為兩個部分&#xff1a; EurekaServer: 作為注冊中心Server端&#xff0c;向微服務應用程序提供服務注冊&#xff0c;發現&#xff0c;健康檢查等能力。 EurekaClient: 服務提供者&#xff0c;服務啟動時&#xff0c;會向 EurekaS…

前端知識點---window.location.assign() 和 window.location.href 的區別(javascript)

window.location.assign() 和 window.location.href 的主要區別&#xff1a; 讀取和設置 window.location.href&#xff1a;既可以讀取當前 URL&#xff0c;也可以通過賦值更改 URL。 window.location.assign()&#xff1a;只能用于跳轉到新的 URL&#xff0c;不能讀取當前地…