npm-ci

清除安裝專案

選擇 CLI 版本

概要

npm ci
aliases: clean-install, ic, install-clean, isntall-clean

說明

此指令類似於 npm install,但它用於自動化環境,例如測試平台、持續整合和部署,或任何您想要確保執行相依性清除安裝的情況。

使用 npm installnpm ci 的主要差異如下

  • 專案必須有現有的 package-lock.jsonnpm-shrinkwrap.json
  • 如果封鎖中的相依性與 package.json 中的相依性不符,npm ci 會傳回錯誤訊息,而不是更新封鎖。
  • npm ci 一次只能安裝整個專案:無法使用此指令新增個別相依性。
  • 如果已存在 node_modulesnpm ci 開始安裝之前會自動將其移除。
  • 它絕不會寫入 package.json 或任何封鎖:安裝基本上是凍結的。

注意:如果您透過執行 npm install 來建立 package-lock.json 檔案,並使用會影響相依性樹狀結構的旗標,例如 --legacy-peer-deps--install-links,您必須提供相同的旗標給 npm ci,否則可能會遇到錯誤。執行此操作的簡單方法是執行,例如 npm config set legacy-peer-deps=true --location=project,並將 .npmrc 檔案提交至您的儲存庫。

範例

確保您有封鎖和最新的安裝

$ cd ./my/npm/project
$ npm install
added 154 packages in 10s
$ ls | grep package-lock

在該專案中執行 npm ci

$ npm ci
added 154 packages in 5s

設定 Travis CI 使用 npm ci 而不是 npm install 來建置

# .travis.yml
install:
- npm ci
# keep the npm cache around to speed up installs
cache:
directories:
- "$HOME/.npm"

設定

install-strategy

  • 預設值:hoisted
  • 類型:hoistednestedshallowlinked

設定安裝 node_modules 中套件的策略。hoisted(預設值):在頂層安裝非重複套件,並在目錄結構中視需要重複安裝。nested(以前為 --legacy-bundling):就地安裝,不提升。shallow(以前為 --global-style):僅在頂層安裝直接相依性。linked(實驗性質):安裝在 node_modules/.store 中,就地連結,未提升。

legacy-bundling

  • 預設值:false
  • 類型:布林值
  • 已棄用:此選項已棄用,建議使用 --install-strategy=nested

不要在 node_modules 中提升封裝安裝,而應以依賴它們的方式安裝封裝。這可能會導致非常深的目錄結構和重複的封裝安裝,因為沒有重複資料刪除。設定 --install-strategy=nested

global-style

  • 預設值:false
  • 類型:布林值
  • 已棄用:此選項已棄用,建議使用 --install-strategy=shallow

僅在頂層 node_modules 中安裝直接依賴項,但在更深的依賴項中提升。設定 --install-strategy=shallow

omit

  • 預設值:如果 NODE_ENV 環境變數設定為「production」,則為「dev」,否則為空。
  • 類型:「dev」、「optional」或「peer」(可以設定多次)

從磁碟上的安裝樹中省略的依賴項類型。

請注意,這些依賴項仍然會解析並新增到 package-lock.jsonnpm-shrinkwrap.json 檔案中。它們只是不會實際安裝在磁碟上。

如果封裝類型同時出現在 --include--omit 清單中,則會包含該類型。

如果產生的省略清單包含 'dev',則 NODE_ENV 環境變數將設定為 'production',以適用於所有生命週期指令碼。

include

  • 預設值
  • 類型:「prod」、「dev」、「optional」或「peer」(可以設定多次)

允許定義要安裝的依賴項類型的選項。

這是 --omit=<type> 的反向操作。

--include 中指定的依賴項類型不會被省略,無論在命令列中指定省略/包含的順序為何。

strict-peer-deps

  • 預設值:false
  • 類型:布林值

如果設定為 true,且未設定 --legacy-peer-deps,則任何衝突的 peerDependencies 都會視為安裝失敗,即使 npm 可以根據非對等依賴項關係合理猜測適當的解析方式。

預設情況下,依賴項圖中深層的衝突 peerDependencies 將使用最近的非對等依賴項規格解析,即使這樣做會導致某些封裝接收超出其封裝的 peerDependencies 物件中設定的範圍的對等依賴項。

執行此類覆寫時,會印出警告,說明衝突和涉及的封裝。如果設定 --strict-peer-deps,則此警告會視為失敗。

foreground-scripts

  • 預設:false,除非使用 npm packnpm publish,預設為 true
  • 類型:布林值

執行已安裝套件的前景處理序中的所有建置指令碼(即 preinstallinstallpostinstall),與主要 npm 處理序共用標準輸入、輸出和錯誤。

請注意,這通常會使安裝執行速度變慢,且會產生更多雜訊,但對於除錯很有用。

ignore-scripts

  • 預設值:false
  • 類型:布林值

如果為 true,npm 就不會執行 package.json 檔案中指定的指令碼。

請注意,明確用於執行特定指令碼的命令,例如 npm startnpm stopnpm restartnpm testnpm run-script,如果設定 ignore-scripts,仍會執行其預期的指令碼,但不會執行任何前置或後置指令碼。

audit

  • 預設:true
  • 類型:布林值

當「true」時,會將稽核報告與目前的 npm 命令一起提交至預設註冊表和所有為範圍設定的註冊表。請參閱 npm audit 的文件,以了解提交的詳細資訊。

  • 預設:true
  • 類型:布林值

指示 npm 為套件可執行檔建立符號連結(或 Windows 上的 .cmd shim)。

設定為 false 以不執行此動作。這可以用於解決某些檔案系統不支援符號連結的事實,即使在表面上是 Unix 系統。

fund

  • 預設:true
  • 類型:布林值

當「true」時,會在每次 npm install 結束時顯示訊息,確認尋找資金的相依性數量。請參閱 npm fund 以取得詳細資訊。

dry-run

  • 預設值:false
  • 類型:布林值

表示您不想讓 npm 做任何變更,且它應該只回報它會做什麼。這可以傳遞到任何修改您本機安裝的指令中,例如 installupdatededupeuninstall,以及 packpublish

注意:這不會受到其他網路相關指令的尊重,例如 dist-tagsowner 等。

workspace

  • 預設值
  • 類型:字串(可設定多次)

啟用在目前專案設定的工作空間的內容中執行指令,同時透過只執行此設定選項所定義的工作空間來進行篩選。

下列為 workspace 設定的有效值

  • 工作空間名稱
  • 工作空間目錄的路徑
  • 父工作空間目錄的路徑(將會選取該資料夾中的所有工作空間)

當設定給 npm init 指令時,這可能會設定給尚未存在的資料夾,以建立資料夾並將其設定為專案中的全新工作空間。

此值不會匯出到子程式的環境中。

workspaces

  • 預設值:null
  • 類型:null 或布林值

設定為 true 以在所有設定的工作空間中執行指令。

明確地將此設定為 false 將會導致像 install 這樣的指令完全忽略工作空間。當未明確設定時

  • 作用於 node_modules 樹狀結構的指令(install、update 等)會將工作空間連結到 node_modules 資料夾中。- 作用於其他事項的指令(test、exec、publish 等)會作用於根專案,除非workspace 設定中指定一個或多個工作空間。

此值不會匯出到子程式的環境中。

include-workspace-root

  • 預設值:false
  • 類型:布林值

當工作空間對指令啟用時,包含工作空間根目錄。

當為 false 時,透過 workspace 設定指定個別工作空間,或透過 workspaces 旗標指定所有工作空間,將會導致 npm 只作用於指定的這些工作空間,而不是根專案。

此值不會匯出到子程式的環境中。

  • 預設值:false
  • 類型:布林值

設定檔案時:通訊協定相依項將會打包並安裝為一般相依項,而非建立符號連結。此選項對工作空間沒有影響。

另請參閱