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.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 레지스트리를 무단 변경하고 패키지 자체의 버전을 변경하지 않고도 패키지의 소스 코드를 변경하면 패키지의 모든 해시를 유지하므로 패키지 잠금 파일에 의해 감지됩니다.
package-lock.json is automatically generated for any operations where npm modifies either the node_modules tree, or package.json. It describes the exact tree that was generated, such that subsequent installs are able to generate identical trees, regardless of intermediate dependency updates.
It describes a single representation of a dependency tree such that teammates, deployments, and continuous integration are guaranteed to install exactly the same dependencies.It contains the following properties.
{
"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"
}
},
}
참고URL : https://stackoverflow.com/questions/44297803/what-is-the-role-of-the-package-lock-json
'IT story' 카테고리의 다른 글
Webpack을 사용하여 vue.js 프로젝트에서 at ( '@') 로그인 경로를 사용하여 ES6 가져 오기 (0) | 2020.05.12 |
---|---|
C ++ 11에서 로컬 정적 변수 초기화는 스레드로부터 안전합니까? (0) | 2020.05.12 |
osx에서 .so와 .dylib의 차이점은 무엇입니까? (0) | 2020.05.12 |
이 게임의 수학적 / 계산 원칙은 무엇입니까? (0) | 2020.05.12 |
instanceof와 동등한 C ++ (0) | 2020.05.12 |