.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-pattern
和 public-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
- 類型:isolated、hoisted、pnp
定義要用於安裝 Node 套件的鏈結器。
- isolated - 依賴項從虛擬存儲區
node_modules/.pnpm
建立符號連結。 - hoisted - 創建一個扁平的
node_modules
,不含符號連結。與 npm 或 Yarn Classic 創建的node_modules
相同。在使用此設置時,將使用 Yarn 的某些庫進行 hoisting。使用此設置的合法原因:- 您的工具無法與符號連結良好配合。如果使用 hoisted
node_modules
,React Native 專案很可能只會正常運作。 - 您的專案部署到無伺服器主機提供者。一些無伺服器提供者(例如 AWS Lambda)不支援符號連結。解決此問題的替代方案是在部署前捆綁應用程式。
- 如果您想要使用
"bundledDependencies"
發布您的套件。 - 如果您使用 Node.js 帶有 --preserve-symlinks 標誌。
- 您的工具無法與符號連結良好配合。如果使用 hoisted
- pnp - 無
node_modules
。Plug'n'Play 是 Node 的一種創新策略,由 Yarn Berry 使用。建議在使用pnp
作為您的鏈結器時,也將symlink
設置為false
。
symlink
- 預設: 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*
您也可以使用 !
排除模式。
註冊表與身份驗證設定
註冊表
- 預設值: https://registry.npmjs.org/
- 類型: url
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_PROXY
、https_proxy
、HTTP_PROXY
或 http_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
時,具有對等依賴的封包在解析對等依賴後將進行重複移除。
例如,假設我們有一個包含兩個專案的工作區,這兩個專案都在其依賴項中具有 webpack
。 webpack
的選擇性對等依賴中有 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
命令。
可以代替 .nvmrc
和 nvm
。代替以下 .nvmrc
文件
16.16.0
使用此 .npmrc
文件
use-node-version=16.16.0
node-version
- 默認值:沒有 v 前綴的 node -v 返回的值
- 類型:semver
檢查包的 engines
設置時要使用的 Node.js 版本。
如果要防止項目的貢獻者添加新的不兼容依賴項,可以在項目的根目錄下使用 node-version
和 engine-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下載的任何目錄:release
、rc
、nightly
、v8-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/
工作區設置
link-workspace-packages
- 默認值: false
- 類型:true、false、deep
如果啟用此選項,本地可用的套件將連結到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-protocol | save-prefix | spec |
---|---|---|
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)
- 類型:highest、time-based、lowest-direct
當 resolution-mode
設置為 time-based
時,相依性將以以下方式解析
- 直接相依性將解析為其最低版本。因此,如果依賴關係中有
foo@^1.1.0
,則將安裝1.1.0
。 - 子相依性將解析自上次直接相依性發佈之前的版本。
使用此解析模式,具有暖緩存的安裝速度更快。它還降低了子相依性劫持的機會,因為只有在直接相依性更新時,子相依性才會更新。
此解析模式僅適用於 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
。