
-
npm install,安裝依賴
-
npm run build,編譯,打包,生成靜態資源
-
服務化靜態資源
FROM node:alpine# 代表生產環境ENV PROJECT_ENV productionWORKDIR /codeADD . /codeRUN npm install && npm run build && npm install -g http-serverEXPOSE 80CMD http-server ./public -p 80
-
使用 Nginx 或者 Traefik 做反向代理
-
使用 Kubernetes 或者 Compose 等做編排
-
使用 GitLab CI 或者 Drone CI 等做 CI/CD
-
構建映象時間過長
-
構建映象大小過大,1G+
FROM node:alpineENV PROJECT_ENV productionWORKDIR /codeADD . /codeRUN npm install --production && npm run build && npm install -g http-serverEXPOSE 80CMD http-server ./public -p 80
FROM node:alpineENV PROJECT_ENV production# http-server 不變動也可以利用快取RUN npm install -g http-serverWORKDIR /codeADD package.json /codeRUN npm install --productionADD . /codeRUN npm run buildEXPOSE 80CMD http-server ./public -p 80
-
在構建伺服器構建映象
-
把映象推至映象倉庫伺服器
-
在生產伺服器拉取映象,啟動容器

FROM node:alpine as builderENV PROJECT_ENV production# http-server 不變動也可以利用快取WORKDIR /codeADD package.json /codeRUN npm install --productionADD . /codeRUN npm run build# 選擇更小體積的基礎映象FROM nginx:alpineCOPY --from=builder /code/public /usr/share/nginx/html
-
/static,此類檔案在專案中直接取用根路徑,打包時複製進 /public 下,需要被打入映象。
-
/build,此類檔案需要 require 取用,會被 webpack 打包並加 hash 值,並透過 publicPath 修改資源地址。可以把此類檔案上傳至 CDN,並加上永久快取,不需要打入映象。
FROM node:alpine as builderENV PROJECT_ENV production# http-server 不變動也可以利用快取WORKDIR /codeADD package.json /codeRUN npm install --productionADD . /code# npm run uploadCdn 是把靜態資源上傳至 cdn 上的指令碼檔案RUN npm run build && npm run uploadCdn# 選擇更小體積的基礎映象FROM nginx:alpineCOPY --from=builder code/public/index.html code/public/favicon.ico /usr/share/nginx/html/COPY --from=builder code/public/static /usr/share/nginx/html/static
知識星球