npm 패키지가 많은 Node.js 앱을 개발하는 경우 하나 이상의 패키지가 업데이트된 경우 프로젝트를 빌드할 때 경고 또는 오류가 발생하는 경우가 드물지 않습니다. 경우에 따라 버전 충돌이 발생하거나 패키지 버전이 더 이상 지원되지 않습니다. 다음은 package.json 파일을 구성하고 경고 또는 오류가 표시되면 발생하는 작업을 이해하는 데 도움이 되는 몇 가지 빠른 팁입니다. 이는 package.json 대한 전체 가이드가 아니며 npm 패키지 버전 관리만을 중시합니다.
npm 패키지 버전 관리 시스템에는 엄격한 규칙이 있습니다. 버전 형식은 다음과 같습니다.
[major].[minor].[patch]
앱에 버전이 5.2.1인 패키지가 있다고 가정해 보겠습니다. 주 버전은 5, 부 버전은 2, 패치는 1입니다.
- 주 버전 업데이트에서 패키지에는 이전 버전과 호환되지 않는 새로운 기능, 즉 호환성이 손상되는 변경 내용이 포함되어 있습니다.
- 마이너 업데이트에서는 이전 패키지 버전과 호환되는 새 기능이 패키지에 추가되었습니다.
- 패치 업데이트에는 하나 이상의 버그 수정이 포함됩니다. 버그 수정은 항상 이전 버전과 호환됩니다.
일부 npm 패키지 기능에는 종속성이 있습니다. 예를 들어 Webpack과 함께 TypeScript 컴파일러 패키지(ts-loader)의 새 기능을 사용하려면 webpack npm 패키지 및 webpack-cli 패키지를 업데이트해야 할 수도 있습니다.
패키지 버전 관리를 지원하기 위해 npm은 package.json사용할 수 있는 몇 가지 표기법을 지원합니다. 이러한 표기법을 사용하여 앱에서 허용하려는 패키지 업데이트의 유형을 제어할 수 있습니다.
React를 사용 중이고, react 및 react-dom npm 패키지를 포함해야 한다고 가정해 보겠습니다. package.json 파일에서 여러 가지 방법으로 지정할 수 있습니다. 예를 들어 다음과 같이 패키지의 정확한 버전을 사용하도록 지정할 수 있습니다.
"dependencies": {
"react": "16.4.2",
"react-dom": "16.4.2",
},
앞의 표기법을 사용하여 npm은 항상 지정된 정확한 버전 16.4.2를 가져옵니다.
특수 표기법을 사용하여 업데이트를 패치 업데이트(버그 수정)로 제한할 수 있습니다. 이 예제에서:
"dependencies": {
"react": "~16.4.2",
"react-dom": "~16.4.2",
},
타일드(~) 문자를 사용하여 패치가 적용된 경우에만 패키지를 업데이트하도록 npm에 지시합니다. 따라서 npm은 react 16.4.2를 16.4.3(또는 16.4.4 등)으로 업데이트할 수 있지만 주 버전 또는 부 버전에 대한 업데이트는 허용하지 않습니다. 따라서 16.4.2는 16.5.0으로 업데이트되지 않습니다.
캐럿(^) 기호를 사용하여 npm이 부 버전 번호를 업데이트할 수 있도록 지정할 수도 있습니다.
"dependencies": {
"react": "^16.4.2",
"react-dom": "^16.4.2",
},
이 표기법을 사용하여 npm은 react 16.4.2를 16.5.0(또는 16.5.1, 16.6.0 등)으로 업데이트할 수 있지만 주 버전에 대한 업데이트는 수락하지 않습니다. 따라서 16.4.2는 17.0.0으로 업데이트되지 않습니다.
npm이 패키지를 업데이트하면 모든 중첩된 패키지를 포함하여 앱에서 사용되는 실제 npm 패키지 버전을 나열하는 package-lock.json 파일이 생성됩니다. package.json 앱에 대한 직접 종속성을 제어하지만 중첩된 종속성(특정 npm 패키지에 필요한 다른 npm 패키지)을 제어하지 않습니다. 다른 개발자와 테스터가 중첩된 패키지를 포함하여 사용 중인 정확한 패키지를 사용하고 있는지 확인해야 하는 경우 개발 주기에서 package-lock.json 파일을 사용할 수 있습니다. 자세한 내용은 npm 설명서의 package-lock.json 참조하세요.
Visual Studio의 경우 package-lock.json 파일이 프로젝트에 추가되지 않지만 프로젝트 폴더에서 찾을 수 있습니다.