[npm] package-lock.json의 역할은 무엇입니까?

npm @ 5가 게시되었으며 새로운 기능인 package-lock.json 파일 (이후 npm install)이 혼동됩니다. 알고 싶습니다.이 파일의 효과는 무엇입니까?



답변

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은 거의 동일한 기능을 수행했지만 잠금 파일의 이름이 바뀌어 기능이 더 명확 해졌습니다. 프로젝트에 수축 랩 파일이 이미 있으면 잠금 파일 대신이 파일이 사용됩니다.


답변

npm은 매우 중요한 개선 사항입니다 . 모든 패키지의 동일한 버전을 정확히 보장하십시오 .

다른 시간에 다른 환경에서 동일한 패키지로 프로젝트를 빌드하는 방법은 무엇입니까? 예를 들어, ^1.2.3에서 사용 package.json하거나 일부 종속성이 이러한 방식으로 사용하고 있지만 각 시간 npm install이 개발자 컴퓨터와 빌드 서버에서 동일한 버전을 선택 하도록 어떻게 할 수 있습니까? package-lock.json이이 를 보장합니다.

npm install빌드 서버 또는 배치 서버에있을 때 잠금 파일을 다시 생성합니다 (잠금 파일에서 npm ci읽고 전체 패키지 트리를 설치 함).


답변

package-lock.json“version”속성 또는 종속성 속성과 같은 속성의 숫자 값이에서 변경 될 때 기록됩니다 package.json.

이 수치의 경우 package.jsonpackage-lock.json일치 package-lock.json에서 읽습니다.

이러한 수치 경우 package.json와는 package-lock.json일치하지 않는, package-lock.json그들은이있는 경우 등 캐럿과 물결로 그 새로운 가치, 새로운 수식으로 기록됩니다. 그러나로 변경되는 원인은 숫자입니다 package-lock.json.

무슨 뜻인지 보려면 다음을 수행하십시오. package.jsonwithout없이 사용하여 다음 을 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 레지스트리를 무단 변경하고 패키지 자체의 버전을 변경하지 않고도 패키지의 소스 코드를 변경하면 패키지의 모든 해시를 유지하므로 패키지 잠금 파일에 의해 감지됩니다.


답변

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 : 현재 애플리케이션에 설치되어있는 정확한 버전 정보가 들어 있습니다.