답변:
package.json 자체와 같이 별표 표시된 버전 관리 (예 : 1.0. *)를 사용하지 않고 정확한 버전 별 종속성 트리를 저장합니다. 이는 다른 개발자 나 제품 릴리스 등에 대한 종속성을 보장 할 수 있음을 의미합니다. 또한 트리를 잠글 수있는 메커니즘이 있지만 package.json이 변경되면 일반적으로 재생성됩니다.
에서 고궁 박물원의 문서 :
npm이 node_modules 트리 또는 package.json을 수정하는 모든 작업에 대해 package-lock.json이 자동으로 생성됩니다. 또한 후속 설치에서 중간 종속성 업데이트에 관계없이 동일한 트리를 생성 할 수 있도록 생성 된 정확한 트리를 설명합니다.
이 파일은 소스 리포지토리에 커밋되어 다양한 목적으로 사용됩니다.
팀원, 배포 및 지속적인 통합이 정확히 동일한 종속성을 설치하도록 종속성 트리의 단일 표현을 설명하십시오.
디렉토리 자체를 커밋하지 않고도 사용자가 node_modules의 이전 상태로 "시간 여행"할 수있는 기능을 제공합니다.
읽을 수있는 소스 제어 차이를 통해 트리 변경의 가시성을 향상시킵니다.
npm이 이전에 설치된 패키지에 대해 반복되는 메타 데이터 해상도를 건너 뛰도록하여 설치 프로세스를 최적화하십시오. "
정확한 버전 번호로 package.json을 사용하는 것에 대한 아래 jrahhali의 질문에 대답하십시오. package.json에는 종속성의 종속성이 아닌 직접 종속성 만 포함됩니다 (때로는 중첩 된 종속성이라고 함). 이것은 표준 패키지를 의미합니다 .json은 중첩 된 종속성의 버전을 제어 할 수 없으며 직접 참조하거나 피어 종속성으로 참조하면 직접 종속성이 이러한 중첩 된 종속성에 대해 정의하는 버전 허용 오차를 제어하지 않으므로 도움이되지 않습니다 .
직접 종속성 버전을 잠그더라도 전체 종속성 트리가 매번 동일하다는 것을 100 % 보장 할 수는 없습니다. 둘째, 직접 의존성에 대한 끊임없는 변경 (시맨틱 버저 닝 기반)을 허용하여 중첩 된 의존성을 훨씬 덜 제어 할 수 있으며 직접 의존성이 어떤 시점에서 의미 론적 버전 관리 규칙을 어 기지 않을 것이라는 보장은 할 수 없습니다 그들 자신.
이 모든 것에 대한 해결책은 위에서 설명한 것처럼 전체 종속성 트리 버전에서 잠그는 잠금 파일입니다. 이를 통해 표준 package.json을 사용하여 새 종속성 버전 (직접 또는 간접)의 테스트를 계속 허용하면서 다른 개발자 또는 릴리스에 대한 종속성 트리를 보장 할 수 있습니다.
NB. 이전 수축 랩 json은 거의 동일한 기능을 수행했지만 잠금 파일의 이름이 바뀌어 기능이 더 명확 해졌습니다. 프로젝트에 수축 랩 파일이 이미 있으면 잠금 파일 대신이 파일이 사용됩니다.
package-lock.json
파일이 업데이트되고 설치 NPM 전화 매번 NPM 5.1 이후를. ( github.com/npm/npm/issues/16866 에서 변경 , 예 : github.com/npm/npm/issues/17979 에서 변경 ) 정확한 버전을 지정하지 않으면 더 이상 모든 개발자에 대해 동일한 버전을 설정하는 데 사용할 수 없습니다. 같은 1.2.3
대신 1.2.*
당신의 package.json
파일.
npm ci
것에 대한 참조를 추가해야합니다 npm install
. 오직 npm ci
반복적 인 견고한 빌드를 얻을 수 있습니다.
npm은 매우 중요한 개선 사항입니다 . 모든 패키지의 동일한 버전을 정확히 보장하십시오 .
다른 시간에 다른 환경에서 동일한 패키지로 프로젝트를 빌드하는 방법은 무엇입니까? 예를 들어, ^1.2.3
에서 사용 package.json
하거나 일부 종속성이 이러한 방식으로 사용하고 있지만 각 시간 npm install
이 개발자 컴퓨터와 빌드 서버에서 동일한 버전을 선택 하도록 어떻게 할 수 있습니까? package-lock.json이이 를 보장합니다.
npm install
빌드 서버 또는 배치 서버에있을 때 잠금 파일을 다시 생성합니다 (잠금 파일에서 npm ci
읽고 전체 패키지 트리를 설치 함).
package-lock.json
파일에서 전혀 읽히지 않습니다 . 예전처럼 설치합니다 package.json
. 의 메이크업에 사용하려면 package-lock.json
파일, 당신은에 나와있는 정확한 버전 설치되는, 새로운 "NPM CI"명령을 사용해야하는 package-lock.json
대신에 주어진 버전 범위를 package.json
.
npm install
않습니다 읽기 package-lock.json
. 재현하려면 다음을 수행하십시오. 이 package.json을 사용하여 npm install
{... "devDependencies": { "sinon": "7.2.2"}}를 실행하십시오. 이제 복사 / 붙여 넣기 package.json
및 package-lock.json
새 디렉토리로. package.json
"sinon": "^ 7.2.2"run으로 변경하십시오 npm install
. npm은 package-lock.json에서 읽고 7.3.0 대신 7.2.2를 설치합니다. package-lock.json이 없으면 7.3.0이 설치됩니다.
package-lock.json
일을하려면 ^를 package-lock.json
사용하여 삭제 하고 다시 생성 하는 것이 합리적 npm install
입니다. (수동으로 편집하고 싶지는 않습니다 package-lock.json
). 의 "version"속성 값을 변경하면 on package.json
에서 동일하게 변경 되지만 의존성에 캐럿을 추가하면와 동일하지 않습니다 . package-lock.json
npm install
package-lock.json
package.json
수동으로 수정할 수있는 무언가로, 그리고 package-lock.json
무언가로 수동으로 만지지 않는다는 것을. 항상 파일을 모두 버전 관리합니다 package-lock.json
. 수동으로 두 파일을 열고에서 프로젝트 이름 편집 package.json
실행, npm install
그리고 얼마나 프로젝트 이름 변경을보고 package-lock.json
. license
에 기록되지 않은 것 같습니다 package-lock.json
.
npm ci
, npm install
바로 잠금 파일이 제공 되더라도, package.json을 사용합니다
package-lock.json
"version"속성 또는 종속성 속성과 같은 속성의 숫자 값이에서 변경 될 때 기록됩니다 package.json
.
이 수치의 경우 package.json
와 package-lock.json
일치 package-lock.json
에서 읽습니다.
이러한 수치 경우 package.json
와는 package-lock.json
일치하지 않는, package-lock.json
그들은이있는 경우 등 캐럿과 물결로 그 새로운 가치, 새로운 수식으로 기록됩니다. 그러나로 변경되는 원인은 숫자입니다 package-lock.json
.
무슨 뜻인지 보려면 다음을 수행하십시오. package.json
without없이 사용하여 다음 을 package-lock.json
실행하십시오 npm install
.
{
"name": "test",
"version": "1.0.0",
...
"devDependencies": {
"sinon": "7.2.2"
}
}
package-lock.json
이제 :
"sinon": {
"version": "7.2.2",
이제 두 파일을 모두 새 디렉토리에 복사 / 붙여 넣기하십시오. 로 변경 package.json
(캐럿 만 추가) :
{
"name": "test",
"version": "1.0.0",
...
"devDependencies": {
"sinon": "^7.2.2"
}
}
을 실행하십시오 npm install
. package-lock.json
파일 이 없으면 sinon@7.3.0이 설치됩니다. npm install
이다 에서 읽기 package-lock.json
및 7.2.2을 설치.
이제 다음 package.json
으로 변경 하십시오.
{
"name": "test",
"version": "1.0.0",
...
"devDependencies": {
"sinon": "^7.3.0"
}
}
을 실행하십시오 npm install
. package-lock.json
에 작성 되었으며 이제 다음과 같이 표시됩니다.
"sinon": {
"version": "^7.3.0",
npm이 node_modules 트리 또는 package.json을 수정하는 모든 작업에 대해 package-lock.json이 자동으로 생성됩니다. 또한 후속 설치에서 중간 종속성 업데이트에 관계없이 동일한 트리를 생성 할 수 있도록 생성 된 정확한 트리를 설명합니다.
팀원, 배포 및 지속적인 통합이 정확히 동일한 종속성을 설치하도록 종속성 트리의 단일 표현을 설명합니다. 여기에는 다음과 같은 속성이 포함됩니다.
{
"name": "mobileapp",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@angular-devkit/architect": {
"version": "0.11.4",
"resolved": "https://registry.npmjs.org/@angular- devkit/architect/-/architect-0.11.4.tgz",
"integrity": "sha512-2zi6S9tPlk52vyqNFg==",
"dev": true,
"requires": {
"@angular-devkit/core": "7.1.4",
"rxjs": "6.3.3"
}
},
}
이 파일은 패키지 설치를 추적하고 프로젝트 종속성의 상태 및 기록을보다 잘 관리하기 위해 npm에 의해 자동으로 생성 및 사용됩니다. 이 파일의 내용을 변경해서는 안됩니다.
package-lock.json : 현재 애플리케이션에 설치되어있는 정확한 버전 정보가 들어 있습니다.