패키지 매니저로 yarn을 사용하는데, 협업하는 과정에서 실수로 `npm` 명령어를 사용해서 `package-lock.json` 파일이 생성되는 경우가 종종 발생한다.
그때 마다 'npm 사용하지 마시고, yarn을 사용해주세요.'라고 말해야 하는 상황(시간이 지나서 또 package-lock.json 파일이 올라온다면...)을 피하고 싶다면 npm을 막고 yarn으로 강제하자.
3가지의 강제화 방법이 있다.
package.json 파일의 scripts 속성의 preinstall 속성을 이용한 강제화 (추천)
// package.json
{
// ... 생략
"scripts": {
// ... 생략
"preinstall": "node -e 'if(!/yarn\\.js$/.test(process.env.npm_execpath))throw new Error(\"yarn을 사용해주세요\")'"
}
}
`$ npm install` 실행시 결과
앞으로 후술할 Engines를 사용하는 방식처럼 따로 .npmrc 파일을 만들 필요가 없고, only-allow 방식처럼 라이브러리를 사용할 필요도 없다.
Package.json 파일의 Engines 값을 이용한 강제화
// package.json
{
// ... 생략
"engines": {
"npm": "npm 대신 yarn을 사용해주세요"
}
}
package.json 파일이 있는 위치에 .npmrc 파일을 생성하여 다음 코드를 추가해야 한다.
// .npmrc
engine-strict = true
`$ npm install` 실행 시 결과
only-allow 라이브러리 사용 (개인적으로 비 추천)
only-allow 라이브러리를 사용하면 원하는 패키지 매니저로 강제할 수 있다.
npm 주소 - https://www.npmjs.com/package/only-allow
하지만 굳이 라이브러리를 써야 하나 싶다. 또한 `boxen`과 `which-pm-runs` 라이브러리에 의존되어있기도 하다.
REFERENCE
Force yarn install instead of npm install for node modules - https://stackoverflow.com/a/41233367
How to Force Use Yarn or NPM - https://www.freecodecamp.org/news/how-to-force-use-yarn-or-npm/