跳至主要內容
版本:9.x

.npmrc

pnpm 從命令列、環境變數和 .npmrc 檔案中獲取其配置。

pnpm config 命令可用於更新和編輯用戶和全局 .npmrc 檔案的內容。

四個相關文件是

  • 每個專案的配置文件(/path/to/my/project/.npmrc
  • 每個工作區的配置文件(包含 pnpm-workspace.yaml 檔案的目錄)
  • 每個用戶的配置文件(~/.npmrc
  • 全局配置文件(/etc/npmrc

所有的 .npmrc 檔案都是 INI 格式key = value 參數列表。

.npmrc 檔案中的值可以使用 ${NAME} 語法包含環境變數。環境變數也可以使用默認值來指定。使用 ${NAME-fallback} 將在未設置 NAME 時返回 fallback${NAME:-fallback} 將在未設置 NAME 或為空字符串時返回 fallback

依賴提升設置

提升

  • 預設: true
  • 類型: boolean

當設置為 true 時,所有依賴都會提升至 node_modules/.pnpm/node_modules。這將使未列出的依賴對於 node_modules 內的所有套件都可訪問。

提升工作區套件

  • 預設: true
  • 類型: boolean

當設置為 true 時,工作區中的套件會被符號連結到 <workspace_root>/node_modules/.pnpm/node_modules<workspace_root>/node_modules 取決於其他提升設置(hoist-patternpublic-hoist-pattern)。

提升模式

  • 預設: ['*']
  • 類型: string[]

告訴 pnpm 應該將哪些套件提升至 node_modules/.pnpm/node_modules。預設情況下,所有套件都會被提升 - 但是,如果您知道只有一些有問題的套件有虛假依賴,您可以使用此選項來專門提升虛假依賴(建議)。

例如

hoist-pattern[]=*eslint*
hoist-pattern[]=*babel*

您也可以使用 ! 排除提升的模式。

例如

hoist-pattern[]=*types*
hoist-pattern[]=!@types/react

公共提升模式

  • 預設: ['*eslint*', '*prettier*']
  • 類型: string[]

與將依賴提升到虛擬存儲區內的隱藏模組目錄的 hoist-pattern 不同,public-hoist-pattern 將匹配模式的依賴提升到根模組目錄。將依賴提升到根模組目錄意味著應用程式代碼將可以訪問虛假依賴,即使它們不正確修改解析策略。

當處理某些有缺陷的可插拔工具無法正確解析依賴時,此設置很有用。

例如

public-hoist-pattern[]=*plugin*

注意:將 shamefully-hoist 設置為 true 等同於將 public-hoist-pattern 設置為 *

您也可以使用 ! 排除提升的模式。

例如

public-hoist-pattern[]=*types*
public-hoist-pattern[]=!@types/react

shamefully-hoist

  • 默認值: false
  • 類型: 布林值

默認情況下,pnpm 創建一個半嚴格的 node_modules,這意味著依賴項可以訪問未聲明的依賴項,但是 node_modules 外的模塊不能。使用此佈局,生態系統中的大多數包都可以正常工作。但是,如果某些工具僅在 hoisted 依賴項位於 node_modules 根目錄時才能正常工作,則可以將其設置為 true 以為您 hoist 它們。

Node-Modules 設置

store-dir

  • 默認值
    • 如果設置了 $PNPM_HOME 環境變量,則為 $PNPM_HOME/store
    • 如果設置了 $XDG_DATA_HOME 環境變量,則為 $XDG_DATA_HOME/pnpm/store
    • 在 Windows 上: ~/AppData/Local/pnpm/store
    • 在 macOS 上: ~/Library/pnpm/store
    • 在 Linux 上: ~/.local/share/pnpm/store
  • 類型: 路徑

將所有套件保存在磁盤上的位置。

存儲應始終位於進行安裝的相同磁盤上,因此每個磁盤上都會有一個存儲。如果當前磁盤上有一個家目錄,則存儲會在其中創建。如果磁盤上沒有家目錄,則存儲會在文件系統的根目錄下創建。例如,如果在掛載在 /mnt 的文件系統上進行安裝,則存儲將在 /mnt/.pnpm-store 創建。Windows 系統也是如此。

可以從不同的磁盤設置存儲,但在這種情況下,pnpm 將從存儲中複製套件,而不是將它們硬連結起來,因為硬連結僅在相同的文件系統上才可能。

modules-dir

  • 默認值: node_modules
  • 類型: 路徑

將安裝依賴項的目錄(而非 node_modules)。

node-linker

  • 預設值:isolated
  • 類型:isolatedhoistedpnp

定義要用於安裝 Node 套件的鏈結器。

  • isolated - 依賴項從虛擬存儲區 node_modules/.pnpm 建立符號連結。
  • hoisted - 創建一個扁平的 node_modules,不含符號連結。與 npm 或 Yarn Classic 創建的 node_modules 相同。在使用此設置時,將使用 Yarn 的某些庫進行 hoisting。使用此設置的合法原因:
    1. 您的工具無法與符號連結良好配合。如果使用 hoisted node_modules,React Native 專案很可能只會正常運作。
    2. 您的專案部署到無伺服器主機提供者。一些無伺服器提供者(例如 AWS Lambda)不支援符號連結。解決此問題的替代方案是在部署前捆綁應用程式。
    3. 如果您想要使用 "bundledDependencies" 發布您的套件。
    4. 如果您使用 Node.js 帶有 --preserve-symlinks 標誌。
  • pnp - 無 node_modules。Plug'n'Play 是 Node 的一種創新策略,由 Yarn Berry 使用。建議在使用 pnp 作為您的鏈結器時,也將 symlink 設置為 false
  • 預設: true
  • 類型: 布林值

symlink 設置為 false 時,pnpm 創建一個不含任何符號連結的虛擬存儲目錄。與 node-linker=pnp 一起使用時,這是一個有用的設置。

enable-modules-dir

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

false 時,pnpm 將不會將任何文件寫入模組目錄(node_modules)。這對於將模組目錄掛載為用戶空間文件系統(FUSE)時很有用。有一個實驗性的 CLI 允許您使用 FUSE 掛載模組目錄:@pnpm/mount-modules

virtual-store-dir

  • 預設值: node_modules/.pnpm
  • 類型: 路徑

具有指向商店的連結的目錄。專案的所有直接和間接相依項目都會連結到此目錄。

這是一個有用的設定,可以解決Windows上的長路徑問題。如果您有一些具有非常長路徑的相依項目,您可以在驅動器的根目錄選擇一個虛擬商店(例如 C:\my-project-store)。

或者您可以將虛擬商店設置為 .pnpm 並將其添加到 .gitignore 中。這將使堆棧跟踪更清晰,因為相依項目的路徑會高一級目錄。

注意: 虛擬商店無法在多個專案之間共享。每個專案應該有自己的虛擬商店(除了在共享根目錄的工作區中)。

package-import-method

  • 預設值: auto
  • 類型: auto, hardlink, copy, clone, clone-or-copy

控制從商店導入套件的方式(如果您想要禁用 node_modules 內的符號連結,則需要更改 node-linker 設置,而不是此設置)。

  • auto - 嘗試從商店克隆套件。如果不支持克隆,則從商店硬連結套件。如果既不能克隆也不能連結,則回退到複製
  • hardlink - 從商店硬連結套件
  • clone-or-copy - 嘗試從商店克隆套件。如果不支持克隆,則回退到複製
  • copy - 從商店複製套件
  • clone - 從商店克隆(也稱為寫時複製或參考連結)套件

克隆是將套件寫入 node_modules 的最佳方式。這是最快速和最安全的方式。使用克隆時,您可以編輯 node_modules 中的文件,而不會修改中央的可內容訪問商店中的文件。

不幸的是,並非所有文件系統都支持克隆。我們建議使用寫時複製(CoW)文件系統(例如,在Linux上使用Btrfs而不是Ext4)以獲得最佳的pnpm體驗。

模組快取最大年齡

  • 預設值: 10080(以分鐘計算的 7 天)
  • 類型: 數字

在此時間(以分鐘計算)之後,應該移除模組目錄中的孤立套件。pnpm 會在模組目錄中保留套件的快取。這在切換分支或降級依賴時提高了安裝速度。

鎖定檔設定

鎖定檔

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

當設置為 false 時,pnpm 不會讀取或生成 pnpm-lock.yaml 檔案。

prefer-frozen-lockfile

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

當設置為 true,且可用的 pnpm-lock.yaml 符合 package.json 的依賴指示時,將執行無頭安裝。無頭安裝會跳過所有依賴解析,因為它不需要修改鎖定檔。

lockfile-include-tarball-url

  • 默認值: false
  • 類型: 布林值

將套件的 tarball 的完整 URL 添加到 pnpm-lock.yaml 中的每個條目。

git-branch-lockfile

  • 默認值: false
  • 類型: 布林值

當設置為 true 時,安裝後生成的鎖定檔名稱將根據當前分支名稱命名,以完全避免合併衝突。例如,如果當前分支名稱為 feature-foo,相應的鎖定檔名稱將是 pnpm-lock.feature-foo.yaml 而不是 pnpm-lock.yaml。通常與命令行參數 --merge-git-branch-lockfiles 或通過在 .npmrc 檔案中設置 merge-git-branch-lockfiles-branch-pattern 一起使用。

merge-git-branch-lockfiles-branch-pattern

  • 預設值: null
  • 類型: 陣列或 null

此配置將當前分支名稱與是否合併所有 git 分支鎖定檔案相匹配。默認情況下,您需要手動傳遞 --merge-git-branch-lockfiles 命令行參數。此配置允許自動完成此過程。

例如

merge-git-branch-lockfiles-branch-pattern[]=main
merge-git-branch-lockfiles-branch-pattern[]=release*

您也可以使用 ! 排除模式。

註冊表與身份驗證設定

註冊表

npm 套件庫的基本 URL(包括尾部斜線)。

<scope>:registry

應該用於指定作用域的套件的 npm 註冊表。例如,設置 @babel:registry=https://example.com/packages/npm/ 將強制使用 pnpm add @babel/core 或任何 @babel 作用域的套件時,從 https://example.com/packages/npm 而不是預設註冊表中提取套件。

<URL>:_authToken

定義訪問指定註冊表時使用的身份驗證承載令牌。例如

//registry.npmjs.org/:_authToken=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 

您也可以使用環境變數。例如

//registry.npmjs.org/:_authToken=${NPM_TOKEN}

或者您可以直接使用環境變數,而不需要更改 .npmrc

npm_config_//registry.npmjs.org/:_authToken=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 

<URL>:tokenHelper

令牌助手是一個可執行文件,用於輸出身份驗證令牌。這可以用於令牌不是常數值,而是定期刷新的情況下,其中腳本或其他工具可以使用現有的刷新令牌來獲取新的訪問令牌。

助手的路徑配置必須是絕對路徑,不帶任何參數。為了安全起見,只允許在用戶的 .npmrc 中設置此值。否則,項目可以將值放在項目的本地 .npmrc 中並運行任意可執行文件。

為默認註冊表設置令牌助手

tokenHelper=/home/ivan/token-generator

為指定的註冊表設置令牌助手

//registry.corp.com:tokenHelper=/home/ivan/token-generator

請求設置

ca

  • 默認值: npm CA 憑證
  • 類型: 字串、陣列或 null

用於對註冊表的 SSL 連接進行信任的憑證授權機構簽署憑證。值應該是 PEM 格式(又名「Base-64 編碼的 X.509 (.CER)」)。例如

ca="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"

設置為 null 以僅允許已知的註冊商,或者設置為特定 CA 憑證以僅信任該特定簽署機構。

通過指定一個憑證陣列可以信任多個 CA(憑證頒發機構)。

ca[]="..."
ca[]="..."

參見 strict-ssl 設置。

cafile

  • 預設值: null
  • 類型: 路徑

一個包含一個或多個憑證頒發機構簽發憑證的文件路徑。類似於 ca 設置,但允許多個 CA,並且可以將 CA 資訊存儲在文件中,而不是通過 CLI 指定。

<URL>:cafile

定義訪問指定登錄表時要使用的憑證授權文件的路徑。例如

//registry.npmjs.org/:keyfile=client-cert.pem

cert

  • 預設值: null
  • 類型: 字串

訪問登錄表時要傳遞的客戶端憑證。值應該是 PEM 格式(又稱「Base-64 編碼的 X.509 (.CER)」)。例如

cert="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"

這不是一個憑證文件的路徑。

<URL>:certfile

定義訪問指定登錄表時要使用的憑證文件的路徑。例如

//registry.npmjs.org/:certfile=server-cert.pem

key

  • 預設值: null
  • 類型: 字串

訪問登錄表時要傳遞的客戶端密鑰。值應該是 PEM 格式(又稱「Base-64 編碼的 X.509 (.CER)」)。例如

key="-----BEGIN PRIVATE KEY-----\nXXXX\nXXXX\n-----END PRIVATE KEY-----"

這不是一個密鑰文件的路徑(並且沒有 keyfile 選項)。

此設置包含敏感信息。不要將其寫入提交到存儲庫的本地 .npmrc 文件中。

<URL>:keyfile

定義訪問指定登錄表時要使用的客戶端密鑰文件的路徑。例如

//registry.npmjs.org/:keyfile=server-key.pem

git-shallow-hosts

  • 默認值: ['github.com', 'gist.github.com', 'gitlab.com', 'bitbucket.com', 'bitbucket.org']
  • 類型: string[]

在提取作為 Git 存儲庫的依賴項時,如果主機列在此設置中,pnpm 將使用淺克隆僅提取所需的提交,而不是全部歷史記錄。

https-proxy

  • 預設值: null
  • 類型: url

用於出站 HTTPS 請求的代理。如果設置了 HTTPS_PROXYhttps_proxyHTTP_PROXYhttp_proxy 環境變量,則將使用它們的值。

如果您的代理 URL 包含用戶名和密碼,請確保對它們進行 URL 編碼。例如

https-proxy=https://use%21r:pas%2As@my.proxy:1234/foo

不要對用戶名和密碼之間的冒號 (:) 進行編碼。

http-proxy

代理

  • 預設值: null
  • 類型: url

用於出站 HTTP 請求的代理。如果設置了 HTTP_PROXY 或 http_proxy 環境變量,代理設置將受基礎請求庫的支持。

local-address

  • 默認值:未定義
  • 類型:IP 地址

在向 npm 註冊表進行連接時使用的本地介面的 IP 地址。

maxsockets

  • 默認值:網絡並發數 x 3
  • 類型:數字

每個源(協議/主機/端口組合)使用的最大連接數。

noproxy

  • 預設值: null
  • 類型: 字串

逗號分隔的一系列域擴展,代理不應該使用它們。

strict-ssl

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

在通過 HTTPS 向註冊表發出請求時是否進行 SSL 金鑰驗證。

另請參閱 ca 選項。

network-concurrency

  • 默認值:16
  • 類型:數字

控制同時處理的 HTTP(S) 請求的最大數量。

fetch-retries

  • 默認值:2
  • 類型:數字

如果 pnpm 在從註冊表獲取時失敗,則重試的次數。

fetch-retry-factor

  • 默認值:10
  • 類型:數字

重試退避的指數因子。

fetch-retry-mintimeout

  • 預設值: 10000(10秒)
  • 類型:數字

用於重試請求的最小(基本)超時時間。

fetch-retry-maxtimeout

  • 預設值: 60000(1分鐘)
  • 類型:數字

確保重試因子不會使請求過長的最大回退超時。

fetch-timeout

  • 預設值: 60000(1分鐘)
  • 類型:數字

等待 HTTP 請求完成的最長時間。

對等依賴設定

auto-install-peers

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

當設定為 true 時,會自動安裝任何缺少的非選擇性對等依賴。

版本衝突

如果來自不同封包的對等依賴具有衝突的版本要求,pnpm 將不會自動安裝任何衝突的對等依賴版本。而是會打印警告。例如,如果一個依賴要求 react@^16.0.0,另一個要求 react@^17.0.0,這些要求衝突,並且不會進行自動安裝。

衝突解決

在版本衝突的情況下,您需要評估安裝哪個版本的對等依賴,或更新依賴以使其對等依賴需求保持一致。

dedupe-peer-dependents

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

當此設定設為 true 時,具有對等依賴的封包在解析對等依賴後將進行重複移除。

例如,假設我們有一個包含兩個專案的工作區,這兩個專案都在其依賴項中具有 webpackwebpack 的選擇性對等依賴中有 esbuild,其中一個專案的依賴中包含 esbuild。 在這種情況下,pnpm 將將兩個 webpack 的實例連結到 node_modules/.pnpm 目錄:一個帶有 esbuild,另一個沒有

node_modules
.pnpm
webpack@1.0.0_esbuild@1.0.0
webpack@1.0.0
project1
node_modules
webpack -> ../../node_modules/.pnpm/webpack@1.0.0/node_modules/webpack
project2
node_modules
webpack -> ../../node_modules/.pnpm/webpack@1.0.0_esbuild@1.0.0/node_modules/webpack
esbuild

這是有道理的,因為 webpack 用於兩個專案,而其中一個專案沒有 esbuild,所以兩個專案不能共享相同的 webpack 實例。 然而,這並不是大多數開發人員所期望的,特別是在提升的 node_modules 中,只會有一個 webpack 的實例。 因此,現在您可以使用 dedupe-peer-dependents 設置來在沒有衝突的對等依賴時對 webpack 進行重複移除(在末尾有解釋)。 在這種情況下,如果我們將 dedupe-peer-dependents 設置為 true,則兩個專案將使用相同的 webpack 實例,即已解析 esbuild 的實例

node_modules
.pnpm
webpack@1.0.0_esbuild@1.0.0
project1
node_modules
webpack -> ../../node_modules/.pnpm/webpack@1.0.0_esbuild@1.0.0/node_modules/webpack
project2
node_modules
webpack -> ../../node_modules/.pnpm/webpack@1.0.0_esbuild@1.0.0/node_modules/webpack
esbuild

什麼是衝突的同行依賴? 衝突的同行依賴是指以下情況

node_modules
.pnpm
webpack@1.0.0_react@16.0.0_esbuild@1.0.0
webpack@1.0.0_react@17.0.0
project1
node_modules
webpack -> ../../node_modules/.pnpm/webpack@1.0.0/node_modules/webpack
react (v17)
project2
node_modules
webpack -> ../../node_modules/.pnpm/webpack@1.0.0_esbuild@1.0.0/node_modules/webpack
esbuild
react (v16)

在這種情況下,我們無法將 webpack 進行整合,因為 webpack 在其同行依賴中包含 react,而在兩個專案的上下文中,react 是從不同版本解析出來的。

strict-peer-dependencies

  • 默認值: false
  • 類型: 布林值

如果啟用此選項,當樹中存在缺失或無效的同行依賴時,命令將失敗。

resolve-peers-from-workspace-root

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

啟用此選項後,將使用根工作區專案的依賴來解析工作區中任何專案的同行依賴。這是一個有用的功能,因為您可以僅在工作區的根目錄中安裝同行依賴,並且您可以確保工作區中的所有專案使用相同版本的同行依賴。

CLI 設置

[no-]color

  • 預設值: auto
  • 類型: auto, always, never

控制輸出中的顏色。

  • auto - 當標準輸出為終端或 TTY 時,輸出使用顏色。
  • always - 忽略終端和管道之間的差異。您很少會需要這個選項;在大多數情況下,如果您希望在重定向的輸出中使用顏色代碼,您可以相反地傳遞一個 --color 標誌給 pnpm 命令,以強制其使用顏色代碼。默認設置幾乎始終是您所需的。
  • never - 關閉顏色。這是由 --no-color 使用的設置。

loglevel

  • 默認: info
  • 類型: debug, info, warn, error

顯示在給定級別或更高級別的任何日誌。您可以相反地傳遞 --silent 以關閉所有輸出日誌。

use-beta-cli

  • 默認值: false
  • 類型: 布林值

實驗性選項,啟用 CLI 測試功能。這意味著您可能會得到一些對 CLI 功能的更改,這些更改可能是破壞性的,或者可能存在錯誤。

recursive-install

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

如果啟用了此選項,pnpm install 的主要行為將變為 pnpm install -r,這意味著安裝將在所有工作區或子目錄包上進行。

否則,pnpm install 將僅在當前目錄中建構套件。

engine-strict

  • 默認值: false
  • 類型: 布林值

如果啟用了此選項,pnpm 將不會安裝任何聲稱與當前 Node 版本不相容的套件。

無論此配置如何,如果專案(而不是依賴項)在其engines字段中指定了不相容的版本,安裝將始終失敗。

npm-path

  • 類型: 路徑

pnpm 用於某些操作(如發布)的 npm 二進制文件的位置。

構建設置

ignore-scripts

  • 默認值: false
  • 類型: 布林值

不執行專案package.json及其依賴項中定義的任何腳本。

注意

此標誌不會阻止執行.pnpmfile.cjs

ignore-dep-scripts

  • 默認值: false
  • 類型: 布林值

不執行已安裝套件的任何腳本。專案的腳本將會執行。

child-concurrency

  • 預設值:5
  • 類型:數字

同時分配用於構建 node_modules 的最大子進程數。

side-effects-cache

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

使用並緩存(pre/post)安裝鉤子的結果。

side-effects-cache-readonly

  • 默認值: false
  • 類型: 布林值

僅當存在時使用副作用緩存,不要為新包創建它。

unsafe-perm

  • 默認值:false 如果以 root 身份運行,否則 true
  • 類型: 布林值

設置為 true 以在運行包腳本時啟用 UID/GID 切換。如果明確設置為 false,則以非 root 用戶安裝將失敗。

node-options

  • 默認值:NULL
  • 類型: 字串

要通過 NODE_OPTIONS 環境變量傳遞給 Node.js 的選項。這不影響 pnpm 本身的執行方式,但會影響生命周期腳本的調用方式。

Node.js 設置

use-node-version

  • 默認值:未定義
  • 類型:semver

指定項目運行時應使用的精確 Node.js 版本。pnpm 將自動安裝指定版本的 Node.js,並用於運行 pnpm run 命令或 pnpm node 命令。

可以代替 .nvmrcnvm。代替以下 .nvmrc 文件

16.16.0

使用此 .npmrc 文件

use-node-version=16.16.0

node-version

  • 默認值:沒有 v 前綴的 node -v 返回的值
  • 類型:semver

檢查包的 engines 設置時要使用的 Node.js 版本。

如果要防止項目的貢獻者添加新的不兼容依賴項,可以在項目的根目錄下使用 node-versionengine-strict.npmrc 文件中。

node-version=12.22.0
engine-strict=true

這樣,即使有人使用 Node.js v16,他們也將無法安裝不支持 Node.js v12.22.0 的新依賴項。

node-mirror:<releaseDir>

  • 默認值:https://node.dev.org.tw/download/<releaseDir>/
  • 類型:URL

設置了從下載 Node.js 的基本 URL。此設置中的<releaseDir>部分可以是從https://node.dev.org.tw/download下載的任何目錄:releasercnightlyv8-canary等。

這是如何配置 pnpm 以從中國的 Node.js 鏡像下載 Node.js 的。

node-mirror:release=https://npmmirror.com/mirrors/node/
node-mirror:rc=https://npmmirror.com/mirrors/node-rc/
node-mirror:nightly=https://npmmirror.com/mirrors/node-nightly/

工作區設置

  • 默認值: false
  • 類型:truefalsedeep

如果啟用此選項,本地可用的套件將連結到node_modules而不是從註冊表中下載。這在 monorepo 中非常方便。如果需要將本地套件連結到子依賴項中,可以使用deep設置。

否則,套件將從註冊表中下載並安裝。但是,仍然可以使用workspace:範圍協議來連結工作區套件。

prefer-workspace-packages

  • 默認值: false
  • 類型: 布林值

如果啟用此選項,將優先使用工作區中的本地套件,即使註冊表中有該套件的更新版本。

此設置僅在工作區不使用save-workspace-protocol時有用。

shared-workspace-lockfile

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

如果啟用此選項,pnpm將在工作區根目錄中創建一個單一的pnpm-lock.yaml文件。這也意味著所有工作區套件的依賴關係將位於單一的node_modules中(並且將符號鏈接到它們的套件node_modules文件夾以供Node的模塊解析使用)。

此選項的優點

  • 每個依賴項都是單例
  • 在 monorepo 中安裝更快
  • 在代碼審查中的變更較少,因為它們都在一個文件中
注意

即使所有依賴項都被硬連接到根node_modules中,套件僅能訪問其在其package.json中聲明的那些依賴項,因此保留了pnpm的嚴格性。這是前面提到的符號鏈接的結果。

save-workspace-protocol

  • 預設值: rolling
  • 類型: true, false, rolling

此設定控制如何將從工作區連結的相依套件新增至 package.json

如果在工作區中有 foo@1.0.0,而您在工作區的另一個專案中執行 pnpm add foo,以下是 foo 如何新增至相依性欄位的方式。 save-prefix 設定也會影響規格的建立方式。

save-workspace-protocolsave-prefixspec
false''1.0.0
false'~'~1.0.0
false'^'^1.0.0
true''workspace:1.0.0
true'~'workspace:~1.0.0
true'^'workspace:^1.0.0
rolling''workspace:*
rolling'~'workspace:~
rolling'^'workspace:^

include-workspace-root

  • 默認值: false
  • 類型: 布林值

當在工作區遞迴執行命令時,也在根工作區專案上執行它們。

ignore-workspace-cycles

  • 默認值: false
  • 類型: 布林值

當設為 true 時,不會列印任何工作區循環警告。

disallow-workspace-cycles

  • 默認值: false
  • 類型: 布林值

當設為 true 時,如果工作區有循環,安裝將失敗。

其他設定

use-running-store-server

  • 默認值: false
  • 類型: 布林值

僅允許與存儲伺服器安裝。 如果沒有運行存儲伺服器,安裝將失敗。

save-prefix

  • 預設值: '^'
  • 類型: '^', '~', ''

配置安裝至 package.json 檔案的套件版本的前置詞。

例如,如果一個套件的版本是 1.2.3,則預設情況下,其版本設置為 ^1.2.3,這允許該套件的小版本升級,但在執行 pnpm config set save-prefix='~' 後,它將設置為 ~1.2.3,僅允許補丁升級。

當所添加的套件有範圍指定時,此設定將被忽略。例如,pnpm add foo@2 將在 package.json 中將 foo 的版本設置為 2,而不管 save-prefix 的值為何。

tag

  • 預設: latest
  • 類型: 字串

如果您使用 pnpm add 安裝套件時沒有指定特定版本,則將根據此設定中的標籤安裝套件的版本。

如果未明確指定標籤,則此設定也會設置添加到由 pnpm tag 命令指定的 package@version 的標籤。

global-dir

  • 默認值
    • 如果設置了 $XDG_DATA_HOME 環境變數,則為 $XDG_DATA_HOME/pnpm/global
    • 在 Windows 上: ~/AppData/Local/pnpm/global
    • 在 macOS 上: ~/Library/pnpm/global
    • 在 Linux 上: ~/.local/share/pnpm/global
  • 類型: 路徑

指定存儲全域套件的自訂目錄。

global-bin-dir

  • 默認值
    • 如果設置了 $XDG_DATA_HOME 環境變數,則為 $XDG_DATA_HOME/pnpm
    • 在 Windows 上: ~/AppData/Local/pnpm
    • 在 macOS 上: ~/Library/pnpm
    • 在 Linux 上: ~/.local/share/pnpm
  • 類型: 路徑

允許設置全域安裝套件的二進制文件目標目錄。

state-dir

  • 默認值
    • 如果設置了 $XDG_STATE_HOME 環境變數,則為 $XDG_STATE_HOME/pnpm
    • 在 Windows 上: ~/AppData/Local/pnpm-state
    • 在 macOS 上: ~/.pnpm-state
    • 在 Linux 上: ~/.local/state/pnpm
  • 類型: 路徑

pnpm 創建的目錄,其中包含僅由更新檢查器使用的 pnpm-state.json 文件。

cache-dir

  • 默認值
    • 如果設置了 $XDG_CACHE_HOME 環境變數,則為 $XDG_CACHE_HOME/pnpm
    • 在 Windows 上: ~/AppData/Local/pnpm-cache
    • 在 macOS 上: ~/Library/Caches/pnpm
    • 在 Linux 上: ~/.cache/pnpm
  • 類型: 路徑

套件元數據快取的位置。

use-stderr

  • 默認值: false
  • 類型: 布林值

當為 true 時,所有輸出將寫入 stderr。

update-notifier

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

設置為 false 以抑制使用舊版 pnpm 時的更新通知。

prefer-symlinked-executables

  • 預設值:true,當 node-linker 設置為 hoisted 且系統為 POSIX 時
  • 類型: 布林值

node_modules/.bin 中建立可執行文件的符號連結,而不是命令 shims。在 Windows 上,只有命令 shims 被使用,此設置將被忽略。

verify-store-integrity

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

預設情況下,如果存儲中的文件已被修改,在將其鏈接到項目的 node_modules 前會檢查此文件的內容。如果將 verify-store-integrity 設置為 false,則安裝期間將不會檢查可內容為地址的存儲中的文件。

ignore-compatibility-db

  • 默認值: false
  • 類型: 布林值

在安裝過程中,某些套件的相依性會自動修補。如果要禁用此功能,請將此配置設置為 false

這些修補程序是從 Yarn 的 @yarnpkg/extensions 套件應用的。

resolution-mode

  • 預設值:highest(從 v8.0.0 到 v8.6.12 是 lowest-direct
  • 類型:highesttime-basedlowest-direct

resolution-mode 設置為 time-based 時,相依性將以以下方式解析

  1. 直接相依性將解析為其最低版本。因此,如果依賴關係中有 foo@^1.1.0,則將安裝 1.1.0
  2. 子相依性將解析自上次直接相依性發佈之前的版本。

使用此解析模式,具有暖緩存的安裝速度更快。它還降低了子相依性劫持的機會,因為只有在直接相依性更新時,子相依性才會更新。

此解析模式僅適用於 npm 的 完整元數據。因此,在某些情況下速度較慢。但是,如果使用 Verdaccio v5.15.1 或更新版本,可以將 registry-supports-time-field 設置為 true,速度將非常快。

resolution-mode 設置為 lowest-direct 時,直接相依性將解析為其最低版本。

registry-supports-time-field

  • 默認值: false
  • 類型: 布林值

如果您使用的註冊表在簡略元數據中返回“time”字段,請將其設置為 true。截至目前,只有從 v5.15.1 開始的 Verdaccio 支持此功能。

extend-node-path

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

false時,命令shims中未設定NODE_PATH環境變數。

deploy-all-files

  • 默認值: false
  • 類型: 布林值

部署封裝或安裝本地封裝時,將複製封裝的所有檔案。默認情況下,如果封裝在package.json中有一個"files"欄位,那麼只會複製列出的檔案和目錄。

dedupe-direct-deps

  • 默認值: false
  • 類型: 布林值

當設置為true時,已經符號鏈接到工作區根目錄node_modules的依賴不會符號鏈接到子專案node_modules目錄中。

dedupe-injected-deps

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

啟用此設置時,將從工作區盡可能符號鏈接注入的相依項。如果依賴項專案和被注入的相依項引用相同的對等相依項,則無需將被注入的相依項實際複製到依賴項的node_modules中;符號鏈接即可。

package-manager-strict

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

當禁用此設置時,如果pnpm的版本與package.json中的packageManager欄位指定的版本不匹配,則pnpm不會失敗。

或者,您可以將COREPACK_ENABLE_STRICT環境變數設置為0