지금까지 작성한 package.json 파일 수를 기억하십니까?
항상 npm에 맡겨두었기 때문에 기억이 나지 않습니다. 잘할 것 같아서 크게 신경쓰지 않았다.
그러나 노드 개발자 패키지.json제대로 알지도 못한다는 것은 터무니없는 일입니다. 이 기회에 패키지 잠금.json나는 그것을 알아 내려고 노력하고있다.
패키지.json
기술을 연구하는 데 공식 문서만큼 좋은 것은 없습니다.
package.json을 찾기 위해 npm 문서로 이동하면 다음 화면이 표시됩니다.

참고로 원어민인 저에게는 위 화면처럼 쉬운 영어가 아래처럼 보입니다.

필요한 것은 종속성 섹션이며 몇 가지 중요한 항목만 살펴보겠습니다.
종속성
종속성은 패키지 이름을 버전 범위에 매핑하는 간단한 개체에 지정됩니다.
버전 범위는 하나 이상의 공백으로 구분된 설명자를 포함하는 문자열입니다.
종속성은 패키지 이름과 버전입니다. 영역는 연결된 개체이고 버전 범위는 하나 이상의 공백으로 구분된 설명자의 문자열입니다.
종속 개체에 테스트 프레임이나 트랜스파일러 또는 기타 “개발” 시간 도구를 포함하지 마십시오.
테스트 도구 및 트랜스파일러와 같이 개발 단계에서 사용되는 도구는 여기에 포함되지 않아야 합니다. 이 경우 npm 설치입력하는 동안 –저장-개발 옵션과 함께 devDependencies(개발 종속성)로 설치해야 합니다.
그리고 버전 범위에 대한 다른 표현이 있습니다. 궁금하신 분들은 아래 링크를 읽어주세요.
https://github.com/npm/node-semver#versions
GitHub – npm/node-semver: 노드용 semver 파서(npm에서 사용)
노드에 대한 semver 파서(npm에서 사용). GitHub에서 계정을 생성하여 npm/node-semver 개발에 기여하십시오.
github.com
내가 만든 package.json 프로젝트의 일부를 가져왔습니다.

^만 있습니다. ^은(는) 무슨 뜻인가요? 그 전에 소프트웨어 관리에 사용되는 버전 관리 방법에 대해 알아보겠습니다.
시맨틱 버전 관리
1.0.0과 같은 버전 표현을 Semantic Versioning(줄여서 SemVer)이라고 합니다. 각 숫자는 (메이저, 마이너, 패치)를 의미합니다.
주요: 종속성을 사용하는 기존 코드를 손상시킬 수 있는 API 변경.
경미: 순전히 기능적임(기존 코드를 손상시키지 않음)
패치: API에 영향을 미치지 않는 내부 구현 개선 및 버그 수정.
밖으로. Google 엔지니어는 이렇게 일합니다.
^^
Received는 캐럿 범위 표현식입니다. 0이 아닌 가장 왼쪽 요소를 변경하지 않는 변경을 허용합니다. 예시를 가져왔습니다.
- ^1.2.3 := >=1.2.3 <2.0.0-0
- ^0.2.3 := >=0.2.3 <0.3.0-0
- ^0.0.3 := >=0.0.3 <0.0.4-0
예를 들어 ^1.2.3가장 왼쪽에 있는 1을 제외한 2와 3의 변경 사항, 즉 마이너 버전과 패치 버전이 다를 수 있습니다.
^0.2.3, 패치 버전이 달라도 범위 내에 있습니다. 다양한 하위 버전은 포함되어 있지 않습니다.
그 다음에 ^0.0.3은? 그것은 0.0.3988794와 같은 버전을 포함할 것입니다. 맞습니까?
npm 설치 node_modules 폴더에 패키지를 설치하는 동안 명령어를 입력하면 package.json에 표현된 범위 내에서 최신 버전을 설치합니다. 따라서 업데이트된 버전으로 패키지를 설치하면 때때로 오류가 발생할 수 있습니다.
올바른 버전을 설치하면 오류를 방지할 수 있습니다. 따라서 npm v5 package-lock.json부터 시작하는 것이 지원됩니다.
패키지 잠금.json
package-lock.json은 npm이 다음 중 하나를 사용하는 모든 작업에 대해 자동으로 생성됩니다.
node_modules 트리 또는 package.json.
패키지-lock.json은 node_modules 트리나 패키지.json수정할 작업에 대해 자동으로 생성됩니다.
package-lock.json의 목적은 정확히 동일한 종속성을 설치하는 것입니다.
따라서 package-lock.json이 프로젝트의 루트 폴더에 있는 경우 npm 설치 명령은 node_modules를 설치하기 위해 package-lock.json을 읽습니다.
이것은 이전 package.json을 가져온 프로젝트 package-lock.json 파일입니다. 정확한 버전이 제공되는지 확인할 수 있습니다.

빠르게 요약
요약하자면 package.json은 패키지 버전을 범위로 표시그리고 package-lock.json은 패키지의 정확한 버전 지정하다.
따라서 node_modules 없이 배포할 때는 package-lock.json이 반드시 필요합니다. 이렇게 하면 공동 작업 시 버전이 달라 발생하는 오류를 방지할 수 있습니다.
+) npm 설치수업 npm CI사이의 차이
npm 설치 패키지.jsonnode_modules를 생성하고 버전 업그레이드가 발생하면 패키지 잠금.json업데이트하려면. 정확한 버전을 지정해야 하므로 의미가 있습니다.
npm은 CI입니다 패키지 잠금.jsonnode_modules 생성, 패키지 잠금.json없다 패키지.json종속성 트리와 다른 경우 오류 메시지가 표시됩니다. 즉, 패키지의 버전이 하나라도 다르면 실행되지 않습니다.
또한 npm ci는 일반적으로 npm 설치보다 빠름 버전 업데이트를 확인하지 않고 지정된 버전만 설치하기 때문입니다.
그러나 node_modules가 있으면 삭제하고 다시 설치하므로 항상 빠르다고 보장할 수는 없습니다. 따라서 주로 CI/CD 또는 테스트에 사용됩니다.