[Node] Corepack

장동균·2024년 3월 24일
0

프로젝트 dependency 버전이 고정되어 있듯이, 프로젝트에서 사용되고 있는 패키지 매니저의 종류와 버전도 고정되어야 한다. 이를 위해 사용할 수 있는 툴이 corepack이다.

corepack을 사용하게 되면 yarn, pnpm과 같은 npm 이외의 패키지 매니저를 설치하지 않고도 사용할 수 있게 된다.

Node.js 14.19 / 16.9 부터 추가된 실험적 기능이며, 이를 사용하기 위해서는 명시적인 활성화가 필요하다.

(이전 노드 버전에서는 npm install -g corepack으로 설치할 수 있다.)

# Used to enable the corepack feature
corepack enable

해당 명령어를 통해 node binary 파일이 구성된 곳에 symlink를 활성화 하게 되고 이곳에 패키지 매니저를 사용하기 위해 필요한 정보들을 저장한다.


가장 가까운 package.json 파일의 packageManager property를 참조하게 된다. packageManager가 명시되어 있지 않으면 default로 선언된 버전이 적용된다.

다음 명령어를 통해 해당 프로젝트에서 사용할 패키지 매니저를 명시할 수 있다. (package.json 파일에 packageManager로 추가된다.)

corepack use yarn@1.22.19

package.json 파일에 packageManager로 명시하지 않고 사용하는 방법은 다음과 같다. (공식 문서에서는 prepare 명령어에 대한 정보가 없다. 정상 동작하는 부분인지 별도 확인이 필요하다.)

corepack prepare yarn@1.22.19 --activate
corepack prepare pnpm@7.3.0 --activate

특정 프로젝트에서 사용할 패키지

globally 하게 패키지 매니저를 설치해두고 사용할 수 있다.

corepack install --global yarn@x.y.z
corepack install --global pnpm@*
corepack install --global yarn@stable

corepack을 비활성화할 수도 있다.

corepack disable

현재 corepack의 default 설정은 yarn과 pnpm이 관리 대상이다. npm은 coreapck의 관리 대상에서 빠져있다.

따라서 packageManager가 yarn 혹은 pnpm으로 설정된 프로젝트에서 npm 명령을 사용해도 오류가 발생하지 않는다고 한다.

npm도 버전을 관리하고 싶은 경우 다음과 같이 설정해볼 수 있다.

corepack enable npm

corepack을 통해 yarn, pnpm을 사용하는 경우 다음의 명령어 형식을 사용해야 한다.

corepack yarn

corepack pnpm

앞에 작성해야하는 corepack을 제거하기 위해서는 2가지 방법이 존재한다.

corepack enable --install-directory path/to/bins_folder

corepack 활성화 시에 bin folder 파일의 위치를 명시해주는 방법이 있다.

alias yarn="corepack yarn"
alias yarnpkg="corepack yarnpkg"
alias pnpm="corepack pnpm"
alias pnpx="corepack pnpx"
alias npm="corepack npm"
alias npx="corepack npx"

다음의 alias 세팅을 해두는 방법이 있다.


https://blog.shalvah.me/posts/why-arent-node-js-package-managers-interoperable

많이 다른 것 같아 보이는 npm, yarn classic, yarn berry, pnpm 이 사실은 어느정도 상호운용이 가능하다고 한다.


https://medium.com/@pacoarjona/node-js-leaves-npm-55d022e95a4f

https://github.com/nodejs/node/issues/50963

https://www.youtube.com/watch?v=o52753VNVXU

corepack의 실행을 default로 설정하는 것에 대한 갑론을박이 진행되고 있다.

대충 여론을 봤을 때는 npm 진영에서 자신들의 위치와 권위를 위해 corepack의 default 설정을 막고 있는 걸로 보인다. (아닐 수도 있다.)

corepack을 만든 주체가 yarn berry 팀이라는 점도 corepack이 node의 default 설정이 되기 어려운 이유 중 하나로 보인다.


참고문헌

https://dev.to/cloudx/corepack-the-node-js-manager-of-package-managers-44dd

https://yceffort.kr/2022/05/npm-vs-yarn-vs-pnpm

https://luvstudy.tistory.com/188

https://nodejs.org/api/corepack.html

https://medium.com/@rohitdeshpande9922/corepack-managing-the-package-managers-d3d4d82f05c2

profile
프론트 개발자가 되고 싶어요