.npmrc
pnpm은 커맨드라인, 환경변수, 그리고 .npmrc
파일을 통해 config를 구성할 수 있습니다.
pnpm config
커맨드를 사용하여 사용자 및 전역.npmrc
파일을 수정할 수 있습니다.
4개의 관련된 파일은 다음과 같습니다.
- 프로젝트별 구성 파일 (
/path/to/my/project/.npmrc
) - 작업 공간별 구성 파일 (
pnpm-workspace.yaml
파일이 포함된 디렉토리) - 사용자별 구성 파일 (
~/.npmrc
) - 전역 구성 파일 (
/etc/npmrc
)
모든 .npmrc
파일은 key = value
의 목록을 갖는 INI-formatted 형식의 파일입니다
의존성 호이스팅 설정
hoist
- 기본값: true
- 유형: boolean
true
로 설정하면 모든 의존성은 node_modules/.pnpm
로 호이스팅 됩니다. 이는 목록에 없는 의존성이 node_modules
내부의 모든 패키지 에 접근할 수 있도록 합니다.
hoist-pattern
- 기본값: ['*']
- 유형: String
어떤 패키지를 node_modules/.pnpm
로 호이스팅 해야 하는지 pnpm에 알립니다. 기본적으로 모든 패키지는 호이스팅됩니다, 하지만 유령 의존성을 갖는 잘못된 패키지를 알고 있다면 이 옵션을 이용해 유령 의존성을 호이스팅할 수 있습니다. (권장)
예를 들어:
hoist-pattern[]=*eslint*
hoist-pattern[]=*babel*
Since v7.12.0, you may also exclude patterns from hoisting using !
.
예를 들어:
hoist-pattern[]=*types*
hoist-pattern[]=!@types/react
public-hoist-pattern
- 기본값: ['*eslint*', '*prettier*']
- 유형: String
hoist-pattern
은 가상 저장소 내부의 숨겨진 모듈 디렉토리에 대한 의존성을 호이스트하는 것과 달리, public-hoist-pattern
은 패턴과 일치하는 의존성을 루트 모듈 디렉토리에 호이스트합니다. 루트 모듈 디렉토리에 대한 호이스팅은 애플리케이션 코드가 해결 전략을 부적절하게 수정하더라도 유령 의존성에 액세스할 수 있음을 의미합니다.
이 설정은 의존성을 제대로 해결하지 못하는 일 부 결함이 있는 플러그형 도구를 처리할 때 유용합니다.
예를 들어:
public-hoist-pattern[]=*plugin*
참고: shamefully-hoist
를 true
로 설정하는 것은 public-hoist-pattern
을 *
로 설정하는 것과 같습니다.
Since v7.12.0, you may also exclude patterns from hoisting using !
.
예를 들어:
public-hoist-pattern[]=*types*
public-hoist-pattern[]=!@types/react
shamefully-hoist
- 기본값: false
- 유형: Boolean
기본적으로 pnpm은 반엄격한 node_modules
을 생성합니다. 즉, 의존성은 선언되지 않은 의존성에 대해 액세스 권한을 갖지만 node_modules
외부의 모듈은 액세스할 수 없습니다. 이 레이아웃을 사용하면 생태계의 대부분의 패키지가 문제 없이 작동합니다. 그러나 일부 도구가 호이스트된 의존성이 node_modules
의 루트에 있을 때만 작동하는 경우, 이를 true
로 설정하여 호이스트할 수 있습니다.
Node-Modules 설정
store-dir
- 기본값:
- If the $PNPM_HOME env variable is set, then $PNPM_HOME/store
- $XDG_DATA_HOME env 변수가 설정되면 $XDG_DATA_HOME/pnpm/store
- Windows: ~/AppData/Local/pnpm/store
- macOS: ~/Library/pnpm/store
- Linux: ~/.local/share/pnpm/store
- 유형: path
모든 패키지가 저장되는 디스크 위치입니다.
저장소는 항상 설치가 발생하는 동일한 디스크에 있어야 합니다. 따라서 디스크당 하나의 저장소가 있도록 합니다. 현재 디스크에 홈 디렉토리가 있으면, 그 안에 저장소가 생성됩니다. 디스크에 홈이 없으면 파일 시스템의 루트에서 저장소가 생성됩니다. 예를 들어, /mnt
에 마운트된 파일 시스템에서 설치가 진행 중인 경우, 저장소는 /mnt/.pnpm-store
에 생성됩니다. Windows 시스템도 마찬가지입니다.
다른 디스크에서 저장소를 설정할 수 있지만, 이 경우 pnpm은 하드 링크 대신 저장소에서 패키지를 복사합니다. 하드 링크는 동일한 파일 시스템에서만 가능하기 때문입니다.
modules-dir
- 기본값: node_modules
- 유형: path
의존성이 설치될 디렉토리 (node_modules
대신).
node-linker
- 기본값: isolated
- 유형: isolated, hoisted, pnp
노드 패키지 설치에 사용해야 하는 링커를 정의합니다.
- isolated - 의존성은
node_modules/.pnpm
의 가상 저장소에서 심볼릭 링크됩니다. - hoisted - 심볼릭 링크가 없는 평탄한
node_modules
이 생성됩니다. npm 또는 Yarn Classic에 의해 생성된node_modules
와 동일합니다. One of Yarn's libraries is used for hoisting, when this setting is used. 이 설정을 사용해야 하는 정당한 이유:- 여러분의 도구가 심볼릭 링크와 잘 작동하지 않습니다. React Native 프로젝트는 호이스트된
node_modules
을 사용하는 경우에만 작동합니다. - 여러분의 프로젝트가 서버리스 호스팅 제공업체에 배포됩니다. 일부 서버리스 공급자 (예: AWS Lambda)는 심볼릭 링크를 지원하지 않습니다. 이 문제에 대한 대안 솔루션은 배포 전에 애플리케이션을 번들로 묶는 것입니다.
"bundledDependencies"
으로 패키지를 게시하려는 경우.- --preserve-symlinks 플래그로 Node.js를 실행하는 경우.
- 여러분의 도구가 심볼릭 링크와 잘 작동하지 않습니다. React Native 프로젝트는 호이스트된
- pnp -
node_modules
미사용. Plug'n'Play는 Yarn Berry에 의해 사용되는 Node.js를 위한 혁신적인 전략입니다. 링커로pnp
를 사용할 때symlink
설정을false
으로 설정하는 것이 좋습니다.
symlink
- 기본값: true
- 유형: Boolean
symlink
이 false
으로 설정되면 pnpm은 symlink가 없는 가상 저장소 디렉터리를 만듭니다. node-linker=pnp
과 함께 사용하면 유용한 설정입니다.
enable-modules-dir
- 기본값: true
- 유형: Boolean
false
이면 pnpm은 모듈 디렉토리 (node_modules
)에 파일을 쓰지 않습니다. 이것은 모듈 디렉토리가 사용자 공간 (FUSE) 의 파일 시스템으로 마운트될 때 유용합니다. FUSE: @pnpm/mount-modules를 사용하여 모듈 디렉토리를 마운트할 수 있는 실험적 CLI가 있습니다.
virtual-store-dir
- 기본값: node_modules/.pnpm
- 유형: path
저장소에 대한 링크가 있는 디렉토리입니다. 프로젝트의 모든 직접 및 간접 의존성이 이 디렉토리에 연결됩니다.
이것은 Windows에서 긴 경로 문제를 해결할 수 있는 유용한 설정입니다. 매우 긴 경로에 대한 의존성이 있다면 여러분의 드라이브의 루트에서 가상 저장소를 선택할 수 있습니다 (예: C:\my-project-store
).
또는 가상 저장소를 .pnpm
로 설정하고 .gitignore
에 추가할 수 있습니다. 이렇게 하면 의존성 경로가 한 디렉토리 더 높기 때문에 스택 트레이스를 더 깔끔하게 만들 수 있습니다.
참고: 가상 저장소는 여러 프로젝트 간에 공유할 수 없습니다. 모든 프로젝트에는 자체 가상 저장소가 있어야 합니다(루트가 공유되는 워크스페이스 제외).
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 - 저장소에서 패키지를 하드링크합니다.
- clone-or-copy - 저장소에서 패키지 복제를 시도합니다. 복제가 지원되지 않으면 복사로 대체합니다.
- copy - 저장소에서 패키지를 복사합니다.
- clone - 저장소에서 패키지를 복제합니다 (copy-on-write 또는 레퍼런스 링크라고도 함).
node_modules에 패키지를 작성할 때 복제가 가장 좋은 방법입니다. 가장 빠르고 안전한 방법입니다. 복제를 사용하면 node_modules에서 파일을 편집할 수 있으며, 이는 중앙 content-addressable 저장소에서 수정되지 않습니다.
불행히도 모든 파일 시스템이 복제를 지원하는 것은 아닙니다. 최고의 pnpm 경험을 위 해 CoW(Copy-On-Write) 파일 시스템(예: Linux에서 Ext4 대신 Btrfs)을 사용하는 것이 좋습니다.
macOS는 복제를 지원하지만, 현재 Node.js에는 pnpm에서 사용하지 못하게 하는 버그가 있습니다. 문제를 해결하는 방법에 대한 아이디어가 있으면 도와주세요.
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 설정
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
버전 7.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.
예를 들어:
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).
<범위>: 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-----"