前言
那天在看 parse-dashboard
的 Dockerfile
時,看到了 RUN npm ci --omit=dev --ignore-scripts
這條命令,順手查了一下它的作用。
說明
命令 npm ci
與 npm install
類似,都可以用於安裝 Node.js 專案的依賴,但是兩者的工作方式略有不同,一般來說開發時常使用 npm install
命令,而在部署 CI/CD 環境或是生產環境時則更傾向使用 npm ci
命令。主要有以下原因:
- 安裝速度更快:
npm ci
是一次性清除並安裝所有依賴,比npm install
更快速,因為它直接使用package-lock.json
文件,而不進行額外的依賴解析。 - 確保一致性:
npm ci
嚴格按照package-lock.json
文件的內容安裝依賴,保證了在不同環境中安裝的依賴版本完全一致。它不會更改或更新package-lock.json
文件中的內容。 - 高效的 CI/CD 工具:
npm ci
會在安裝前刪除整個node_modules
文件夾,這確保了乾淨的安裝環境,因此非常適合自動化建構環境。
而 --omit=dev
參數,則會在安裝依賴時,忽略開發依賴(devDependencies
);由於只需要安裝執行階段的必需依賴,而不包含用於開發和測試的依賴,從而減少了安裝時間和空間佔用。
$ npm ci --omit=dev --ignore-scripts
在上述命令中:
npm ci
:用於清除並重新安裝所有依賴。與npm install
不同,它會嚴格按照package-lock.json
文件中指定的版本安裝,確保一致的依賴樹。--omit=dev
:跳過devDependencies
,只安裝dependencies
中指定的依賴。適合生產環境的部署需求。--ignore-scripts
:忽略在安裝過程中定義的所有scripts
。這些scripts
通常包含在package.json
文件中的scripts
欄位下,例如preinstall
、postinstall
、prepare
等。