git clone으로 예전에 만든 Node.js + Express 프로젝트를 다운받고 제일 최신 커밋에서 npm i 하였는데, 다음과 같은 현상이 발생함. npm run start 하기에는 지장 없음.
(깃허브에서 코드 보기)
node.js 16.14.0
npm 8.3.1
프로젝트를 만들 당시 쓴 npm 버전(버전 7 미만 추측)이, 내 컴에 설치된 npm 버전(8.3.1)보다 낮았음.
방법 1) 경고일 뿐이니 무시.
방법 2) 예전에 쓴 npm으로 다운그레이드. (미검증)
방법 3) npm을 버전 7 미만으로 다운그레이드한다. package-lock.json에서 lockfileVersion이 1에서 2로 바뀐 것은 npm 7부터이기 때문이다. (미검증)
나는 방법 1을 택했다.
위의 이슈를 해결하는 과정에서 알게 된 관련 지식을 정리하였다. (package-lock.json의 쓰임새 등)
package-lock.json 파일은 npm을 사용해서 node_modules 트리나 package.json 파일을 수정하게 되면 자동으로 생성되는 파일이다. 파일이 생성되는 시점의 의존성 트리에 대한 정확한 정보를 가지고 있다.
package-lock.json이 존재하는 경우 npm install의 동작이 조금 달라진다. npm install 시 더 이상 package.json을 계산하지 않고, package-lock.json에 명시된 의존 패키지들을 통해 node_modules를 만들어낸다.
package-lock.json은 패키지 매니저가 신규 패키지를 설치하거나 기존 패키지를 갱신/제거할 때마다 package.json과 자동으로 동기를 맞춰주기 때문에 개발자가 이 파일을 직접 수정해야 할 필요는 없으며 해서도 안 된다.
package-lock.json의 포맷. npm 7에서 버전 2로 바뀜.
node.js 공식 페이지 > DOWNLOADS > Previous Release에 나와 있다.
예를 들어 node.js 16.14.0의 npm 버전은 8.3.1이다.
NVM으로 가능하다. (추후 정리)
npm run start 시, 아래와 같은 메시지가 뜰 때가 있는데, 무시해도 된다.
Browserslist: caniuse-lite is outdated. Please run the following command: npx browserslist --update-db
(추후 정리)
Node.js + Express 앱에서 npm i 시 The package-lock.json file was created with an old version of npm가 나와도, 이것은 에러가 아닌 경고이니 무시해도 된다.
package-lock.json은 정확한 의존성 트리 정보를 갖는다. 직접 수정할 일은 없다.
보안 때문에 커밋하지 말라는 의견이 있지만, 협업을 위해 프로젝트 제작 당시의 의존성을 그대로 복원하려면 pacakage-lock.json 역시 커밋해줄 필요가 있다.
The package-lock.json file was created with an old version of npm 이슈 해결법
package-lock.json の lockfileVersion が変更されてしまう場合の対処法
npm WARN old lockfile The package-lock.json file was created with an old version of npm
Downgrade npm to an older version
Npm install throws warn old lockfile error
package-lock.json is rewritten after npm install
The package-lock.json file was created with an old version of npm , and node module is not installing
[Solved] npm WARN old lockfile The package-lock.json file was created with an old version of npm
node.js 버전별로 사용되는 npm 버전을 알 수 있는 곳
node.js 공식 사이트 > DOWNLOADS > Previous Releases
package-lock.json의 정의, 커밋 추천/비추천 이유
package-lock.json은 왜 필요할까?
Npm 거슬리는 pacakge-lock.json?
npm 공식 사이트 > npm Docs > package-lock.json
패키지 잠금 파일 (package-lock.json, yarn.lock)
Package.json과 Package-lock.json의 차이를 아시나요?
[JavaScript] package.json, package-lock.json
Do I commit the package-lock.json file created by npm 5?
package-lock.json은 왜 필요한가?
[Node.js] express 프로젝트 셋업하기
package-lock.json lockfileVersion
package-lock.json의 lockfileVersion에 대해
npm 공식 사이트 > npm Docs > package-lock.json > lockfileVersion