.npmrc
pnpm 從命令列、環境變數和 .npmrc
檔中取得組態。
pnpm config
命令可以用於更新或編輯使用者及全域 .npmrc
檔的內容。
四個相關的檔案是:
- 每個專案的設定檔 (
/path/to/my/project/.npmrc
) - 每個工作區的設定檔 (包含
pnpm-workspace.yaml
檔的目錄) - 每位使用者的設定檔 (
~/.npmrc
) - 全域設定檔 (
/etc/npmrc
)
所有 .npmrc
檔都是使用 INI 格式的 key = value
參數清單。
相依性提升設定
hoist
- 預設值:true
- 類型:boolean
若為 true
,則提升所有依賴包提升到 node_modules/.pnpm
。 這樣使得未列出的依賴可以被 node_modules
中的所有包訪問。
hoist-pattern
- 預設值:['*']
- 類型:string[]
告訴 pnpm 應該將哪些包提升到 node_modules/.pnpm
。 在預設情況下,所有的包都是被提升的,但是如果你知道只有一些有缺陷的包有幻影依賴關係, 您可以使用此選項來只提升有幻影依賴關係的包(推薦)。
例如:
hoist-pattern[]=*eslint*
hoist-pattern[]=*babel*
自 v7.12.0 起,您可能還需要使用 !
來從提升中排除模式。
例如:
hoist-pattern[]=*types*
hoist-pattern[]=!@types/react
public-hoist-pattern
- 預設值:['*eslint*', '*prettier*']
- 類型:string[]
Unlike hoist-pattern
, which hoists dependencies to a hidden modules directory inside the virtual store, public-hoist-pattern
hoists dependencies matching the pattern to the root modules directory. Hoisting to the root modules directory means that application code will have access to phantom dependencies, even if they modify the resolution strategy improperly.
This setting is useful when dealing with some flawed pluggable tools that don't resolve dependencies properly.
例如:
public-hoist-pattern[]=*plugin*
Note: Setting shamefully-hoist
to true
is the same as setting public-hoist-pattern
to *
.
自 v7.12.0 起,您可能還需要使用 !
來從提升中排除模式。
例如:
public-hoist-pattern[]=*types*
public-hoist-pattern[]=!@types/react
shamefully-hoist
- 預設值:false
- 類型:Boolean
By default, pnpm creates a semistrict node_modules
, meaning dependencies have access to undeclared dependencies but modules outside of node_modules
do not. With this layout, most of the packages in the ecosystem work with no issues. However, if some tooling only works when the hoisted dependencies are in the root of node_modules
, you can set this to true
to hoist them for you.
節點模組設定
store-dir
- 預設值:
- If the $PNPM_HOME env variable is set, then $PNPM_HOME/store
- If the $XDG_DATA_HOME env variable is set, then $XDG_DATA_HOME/pnpm/store
- On Windows: ~/AppData/Local/pnpm/store
- On macOS: ~/Library/pnpm/store
- On Linux: ~/.local/share/pnpm/store
- 類型:path
The location where all the packages are saved on the disk.
The store should be always on the same disk on which installation is happening, so there will be one store per disk. If there is a home directory on the current disk, then the store is created inside it. If there is no home on the disk, then the store is created at the root of the filesystem. For example, if installation is happening on a filesystem mounted at /mnt
, then the store will be created at /mnt/.pnpm-store
. The same goes for Windows systems.
It is possible to set a store from a different disk but in that case pnpm will copy packages from the store instead of hard-linking them, as hard links are only possible on the same filesystem.
modules-dir
- 預設值:node_modules
- 類型:path
The directory in which dependencies will be installed (instead of node_modules
).
node-linker
- 預設值:isolated
- 類型:isolated, hoisted, pnp
Defines what linker should be used for installing Node packages.
- isolated - 從位於
node_modules/.pnpm
的虛擬存放區建立指向相依性的符號連結。 - hoisted - 沒有建立符號連結的一般
node_modules
。 與 npm 或 Yarn 傳統版建立的node_modules
相同。 使用這個設定時,有一個 Yarn 程式庫用於提升。 使用此設定的合法原因:- 您的工具無法與符號連結一起使用。 React Native 專案將很有可能僅在您使用已提升的
node_modules
時才可以使用。 - 您 的專案部署在一個無伺服器的主機服務提供者。 一些無伺服器的提供者 (例如 AWS Lambia) 不支援符號連結。 或者,您也可以在部署之前組合應用程式來解決此問題。
- 您想要使用
"bundledDependencies"
發布套件。 - 您正在使用 --preserve-symlinks 旗標執行 Node.js。
- 您的工具無法與符號連結一起使用。 React Native 專案將很有可能僅在您使用已提升的
- pnp - 無
node_modules
。 隨插即用是一種創新策略,適用於 Yarn Berry 使用的 Node。 推薦在使用pnp
作為連結器時,也將symlink
設定為false
。
symlink
- 預設值:true
- 類型:Boolean
When symlink
is set to false
, pnpm creates a virtual store directory without any symlinks. It is a useful setting together with node-linker=pnp
.
enable-modules-dir
- 預設值:true
- 類型:Boolean
When false
, pnpm will not write any files to the modules directory (node_modules
). This is useful for when the modules directory is mounted with filesystem in userspace (FUSE). There is an experimental CLI that allows you to mount a modules directory with FUSE: @pnpm/mount-modules.
virtual-store-dir
- 預設值:node_modules/.pnpm
- 類型:path
The directory with links to the store. All direct and indirect dependencies of the project are linked into this directory.
This is a useful setting that can solve issues with long paths on Windows. If you have some dependencies with very long paths, you can select a virtual store in the root of your drive (for instance C:\my-project-store
).
Or you can set the virtual store to .pnpm
and add it to .gitignore
. This will make stacktraces cleaner as paths to dependencies will be one directory higher.
NOTE: the virtual store cannot be shared between several projects. Every project should have its own virtual store (except for in workspaces where the root is shared).
package-import-method
- 預設值:auto
- 類型: auto, hardlink, copy, clone, clone-or-copy
Controls the way packages are imported from the store (if you want to disable symlinks inside node_modules
, then you need to change the node-linker setting, not this one).
- auto - 嘗試從存放區複製套件。 如果不支援複製,則從存放區建立指向套的 Hardlink。 如果再製和建立連結都不可行,則回到複製
- hardlink - 從存放區建立套件的永久連結
- clone-or-copy - 嘗試從存放區再製套件。 如果不支援再製,則回到複製
- copy - 從存放區複製套件
- clone - 從存放區再製 (又稱為寫入時複製或參考連結) 套件
Cloning is the best way to write packages to node_modules. It is the fastest way and safest way. When cloning is used, you may edit files in your node_modules and they will not be modified in the central content-addressable store.
Unfortunately, not all file systems support cloning. We recommend using a copy-on-write (CoW) file system (for instance, Btrfs instead of Ext4 on Linux) for the best experience with pnpm.
Even though macOS supports cloning, there is currently a bug in Node.js that prevents us from using it in pnpm. If you have ideas how to fix it, help us.
modules-cache-max-age
- 預設值: 10080 (7 天,以分鐘為單位)
- 類 型:Number
The time in minutes after which orphan packages from the modules directory should be removed. pnpm keeps a cache of packages in the modules directory. This boosts installation speed when switching branches or downgrading dependencies.
鎖定檔設定
lockfile
- 預設值:true
- 類型:Boolean
When set to false
, pnpm won't read or generate a pnpm-lock.yaml
file.
prefer-frozen-lockfile
- 預設值: true
- 類型:Boolean
When set to true
and the available pnpm-lock.yaml
satisfies the package.json
dependencies directive, a headless installation is performed. A headless installation skips all dependency resolution as it does not need to modify the lockfile.
lockfile-include-tarball-url
新增於:v7.6.0
- 預設值:false
- 類型:Boolean
Add the full URL to the package's tarball to every entry in pnpm-lock.yaml
.
git-branch-lockfile
Added in: v7.3.0
- 預設值:false
- 類型:Boolean
When set to true
, the generated lockfile name after installation will be named based on the current branch name to completely avoid merge conflicts. For example, if the current branch name is feature-foo
, the corresponding lockfile name will be pnpm-lock.feature-foo.yaml
instead of pnpm-lock.yaml
. It is typically used in conjunction with the command line argument --merge-git-branch-lockfiles
or by setting merge-git-branch-lockfiles-branch-pattern
in the .npmrc
file.
merge-git-branch-lockfiles-branch-pattern
Added in: v7.3.0
- Default: null
- Type: Array or null
This configuration matches the current branch name to determine whether to merge all git branch lockfile files. By default, you need to manually pass the --merge-git-branch-lockfiles
command line parameter. This configuration allows this process to be automatically completed.
For instance:
merge-git-branch-lockfiles-branch-pattern[]=main
merge-git-branch-lockfiles-branch-pattern[]=release*
You may also exclude patterns using !
.
use-lockfile-v6
Added in: v7.24.0
- 預設值:false
- 類型:Boolean
Use the new v6 lockfile format, which will be the default one in pnpm v8. This new format is more readable as it doesn't use hashes to shorten long dependency paths.
登錄與驗證設定
registry
- Default: https://registry.npmjs.org/
- Type: url
The base URL of the npm package registry (trailing slash included).
<scope>:registry
The npm registry that should be used for packages of the specified scope. For example, setting @babel:registry=https://example.com/packages/npm/
will enforce that when you use pnpm add @babel/core
, or any @babel
scoped package, the package will be fetched from https://example.com/packages/npm
instead of the default registry.
<URL>:_authToken
Define the authentication bearer token to use when accessing the specified registry. For example:
//registry.npmjs.org/:_authToken=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
You may also use an environment variable. For example:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
Or you may just use an environment variable directly, without changing .npmrc
at all:
npm_config_//registry.npmjs.org/:_authToken=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
<URL>:tokenHelper
A token helper is an executable which outputs an auth token. This can be used in situations where the authToken is not a constant value but is something that refreshes regularly, where a script or other tool can use an existing refresh token to obtain a new access token.
The configuration for the path to the helper must be an absolute path, with no arguments. In order to be secure, it is only permitted to set this value in the user .npmrc
. Otherwise a project could place a value in a project's local .npmrc
and run arbitrary executables.
Setting a token helper for the default registry:
tokenHelper=/home/ivan/token-generator
Setting a token helper for the specified registry:
//registry.corp.com:tokenHelper=/home/ivan/token-generator
Request Settings
ca
- Default: The npm CA certificate
- Type: String, Array or null
The Certificate Authority signing certificate that is trusted for SSL connections to the registry. Values should be in PEM format (AKA "Base-64 encoded X.509 (.CER)"). For example:
ca="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
Set to null to only allow known registrars, or to a specific CA cert to trust only that specific signing authority.
Multiple CAs can be trusted by specifying an array of certificates:
ca[]="..."
ca[]="..."
See also the strict-ssl
config.
cafile
- Default: null
- 類型:path
A path to a file containing one or multiple Certificate Authority signing certificates. Similar to the ca
setting, but allows for multiple CAs, as well as for the CA information to be stored in a file instead of being specified via CLI.
cert
- Default: null
- Type: String
A client certificate to pass when accessing the registry. Values should be in PEM format (AKA "Base-64 encoded X.509 (.CER)"). For example:
cert="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
It is not the path to a certificate file (and there is no certfile
option).
key
- Default: null
- Type: String
A client key to pass when accessing the registry. Values should be in PEM format (AKA "Base-64 encoded X.509 (.CER)"). For example:
key="-----BEGIN PRIVATE KEY-----\nXXXX\nXXXX\n-----END PRIVATE KEY-----"
It is not the path to a key file (and there is no keyfile
option).
This setting contains sensitive information. Don't write it to a local .npmrc
file committed to the repository.
git-shallow-hosts
- Default: ['github.com', 'gist.github.com', 'gitlab.com', 'bitbucket.com', 'bitbucket.org']
- 類型:string[]
When fetching dependencies that are Git repositories, if the host is listed in this setting, pnpm will use shallow cloning to fetch only the needed commit, not all the history.
https-proxy
- Default: null
- Type: url
A proxy to use for outgoing HTTPS requests. If the HTTPS_PROXY
, https_proxy
, HTTP_PROXY
or http_proxy
environment variables are set, their values will be used instead.
If your proxy URL contains a username and password, make sure to URL-encode them. For instance:
https-proxy=https://use%21r:pas%2As@my.proxy:1234/foo