UFO ET IT

lockfileVersion sonpm에서 특정 형식을 사용하여 package-lock.json을 수정할 수 있는 방법이 있습니까?

ufoet 2023. 5. 13. 20:36
반응형

lockfileVersion sonpm에서 특정 형식을 사용하여 package-lock.json을 수정할 수 있는 방법이 있습니까?

의 다른 개발자들이 원래 15)와의 다른 , 이 프로젝트는 node(12/15)와 npm(6/7)을 사용합니다.package-lock.json "lockfileVersion": 1를 사용하는 패키지를 할 때 npm 7x를 사용하는 .package-lock.json를 사용하여 다시 생성됩니다."lockfileVersion": 2.

은 npm v6를 , npm v6를 하는 개발자에게 문제가 되는 것 .lockfileVersion 2하지만 결국 새로운 차이를 만들어냅니다.

npm WARN 읽기-축소 랩 이 버전의 npm은 lockfileVersion@1과 호환되지만 lockfileVersion@2에 대해 package-lock.json이 생성되었습니다.최선을 다해 보겠습니다!

의 최신 버전으로 지정할 수 있는 방법이 있습니까?npm오로지 사용하기 위해"lockfileVersion": 1아니면 모든 개발자를 동일한 버전의npm?

의 최신 버전으로 지정할 수 있는 방법이 있습니까?npm오로지 사용하기 위해"lockfileVersion": 1아니면 모든 개발자를 동일한 버전의npm?

Node/NPM 버전을 고정하고 환경(개발, 스테이징 및 프로덕션)에 맞게 조정하는 것이 좋습니다.

프로젝트 파일에 추가하여 노드 버전을 관리할 수 있습니다(소스 컨트롤에 저장하는 것을 잊지 마십시오).

를 들어, 예를들어어입니다..nvmrc다음과 같이 표시됩니다.

$ cat .nvmrc
14.15.0

그러면, 당신은 사용할 수 있습니다.nvm install && nvm use고정된 버전의 노드를 사용합니다.

NPM은 또한 다음을 지원합니다.

항목이 작동하는 노드의 버전을 지정할 수 있습니다.

{ "engines" : { "node" : ">=0.10.3 <0.12" } }

또한 종속성과 마찬가지로 버전을 지정하지 않은 경우(또는 "*"를 버전으로 지정한 경우) 노드의 모든 버전이 사용할 수 있습니다.

"엔진" 필드를 지정할 경우, npm은 "노드"가 해당 목록의 어딘가에 있어야 합니다."엔진"이 생략되면 npm은 노드에서 작동하는 것으로 가정합니다.

또한 "엔진" 필드를 사용하여 프로그램을 올바르게 설치할 수 있는 npm 버전을 지정할 수 있습니다.예:

{ "engines" : { "npm" : "~1.0.20" } }

사용자가 엔진 엄격 구성 플래그를 설정하지 않은 경우 이 필드는 권장 사항일 뿐이며 패키지가 종속성으로 설치된 경우에만 경고를 생성합니다.

를 할 때engines필드 앤드 메이크npm 조건이되지 않을 때합니다. 를 설정합니다.engine-strict=true(기본값이므로) 파일 또는 환경 변수로

true로 설정하면 npm은 현재 Node.js 버전과 호환되지 않는다고 주장하는 패키지의 설치를 완강히 거부하거나 설치를 고려합니다.

--force 플래그를 설정하여 이 값을 재정의할 수 있습니다.

또 다른 접근 방식은 개발 및 실행을 위한 런타임 환경으로 Docker 컨테이너를 사용하는 것입니다. 이는 Node나 NPM을 설치할 필요가 없다는 것을 의미합니다.

$ mkdir my-project
$ cd my-project
$ docker run --rm -it -v $PWD:/app --entrypoint /bin/bash --workdir /app node:14.15.0
root@4da6ee3c2ac0:/app# npm init -y
Wrote to /app/package.json:

{
  "name": "app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}


root@4da6ee3c2ac0:/app# npm install
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN app@1.0.0 No description
npm WARN app@1.0.0 No repository field.

up to date in 1.694s
found 0 vulnerabilities

root@4da6ee3c2ac0:/app# exit
exit
$ ls -x1
package-lock.json
package.json

보다시피 노드나 NPM이 없는 경우:

  1. 새 프로젝트를 위한 새 디렉터리를 만들었습니다.
  2. Node 및 NPM과 함께 제공되는 Node Docker 컨테이너 스핀업
  3. 프로젝트를 .npm init -y)
  4. 도커 컨테이너를 종료했습니다.
  5. 컨테이너가 회전된 작업 디렉토리 내의 파일 나열

docker run위의 명령은 길기 때문에 더 능률적인 워크플로우를 위해 도커-프로파일링을 활용할 수 있습니다.

npm WARN 읽기-축소 랩 이 버전의 npm은 lockfileVersion@1과 호환되지만 lockfileVersion@2에 대해 package-lock.json이 생성되었습니다.최선을 다해 보겠습니다!

이 문제를 해결하려면 명령 실행

npm i -g npm@latest

전체적으로 및 명령 실행

npm i npm@latest

프로젝트 파일에서 문제를 해결하는 데 도움이 되었습니다.

전기 준 기준8.1.0▁flag다있▁a▁is▁there니라는 깃발이 있습니다.--lockfile-versionnpm기본 잠금 파일 버전을 재정의할 수 있습니다.

npm i --lockfile-version 3

하지 않고 .--package-lock-only

npm i --lockfile-version 3 --package-lock-only

여기 원본 PR 링크가 있습니다.

제가 보기에는 npm 문서에 따르면 npm v6는 경고에도 불구하고 버전 2 잠금 파일로 작동하므로 승인된 답변에서 제안된 작업을 수행할 필요가 없으며 경고 메시지를 무시해도 됩니다.

npm 7 릴리스 노트에서 다음과 같이 말했습니다.

한 가지 주목해야 할 변경 사항은 npm 6 사용자와 역호환되는 새로운 잠금 파일 형식입니다.잠금 파일 v2는 패키지 트리를 생성하기 위해 결정론적이고 재현 가능한 빌드를 수행하는 기능을 잠금 해제합니다.

npm 문서에는 다음과 같이 나와 있습니다(제가 강조합니다).

lockfileVersion

이 package-lock.json을 생성할 때 의미론이 사용된 이 문서의 버전 번호로 시작하는 정수 버전입니다.

npm v7에서는 node_modules 또는 npm 레지스트리를 검색해야 하는 정보를 추적하기 위해 파일 형식이 크게 변경되었습니다.npm v7에서 생성한 잠금 파일에 잠금 파일 버전 2가 포함됩니다.

  • 제공된 버전 없음: npm v5 이전 버전의 "고대" 축소 랩 파일입니다.
  • 1: npm v5 및 v6에서 사용하는 잠금 파일 버전입니다.
  • 2: npm v7에서 사용하는 잠금 파일 버전으로, v1 잠금 파일과 역호환됩니다.
  • 3: 이전 버전과의 호환성이 없는 npm v7에서 사용하는 잠금 파일 버전입니다.는 node_modules/.package-lock.json의 숨겨진 잠금 파일에 사용되며, npm v6에 대한 지원이 더 이상 관련이 없는 경우 npm의 향후 버전에서 사용될 가능성이 높습니다.

그렇기 때문에 잠금 파일을 v1에서 v2로 자동 업그레이드할 수 있습니다. 여기서 언급한 바와 같습니다.

사용하는 것보다 훨씬 더 간단한 솔루션이 있습니다.nvm:

npx npm@6.14.17 i --save

이를 통해 버전 1로 새 잠금 파일을 생성하고 최신 노드 js 버전을 사용할 수 있으며 시스템에서 아무것도 변경할 필요가 없습니다.

저는 오늘 같은 문제에 직면했습니다.와 다른 의 프로젝트를 .npm(>7)과 저는 같은 문제에 부딪혔습니다.간단히 업그레이드했습니다.npm위에서 언급한 대로 다른 개발자가 사용하던 최신 버전의 버전입니다.은 다음업드단다니계를 하는 입니다.npm (창구용):

먼, 시에서다에서 다음 할 수 합니다.PowerShell실행하기PowerShell~하듯이Administrator딸깍하는 소리StartPowerShell마우스 버튼을 클릭합니다.PowerShell를 선택합니다.Run as Administrator.

다음 명령을 실행합니다.

Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force

다음 이 도구를 하려면 다음▁from▁an,▁(▁then▁elevated(지▁run▁the다also가마▁to▁tool▁and,▁upgr).PowerShell또는cmd.exe:). 참고:이 도구에는 적어도 다음이 필요합니다.Node v8

npm install --global --production npm-windows-upgrade
npm-windows-upgrade

최신 버전만 설치하시겠습니까?물론:

npm-windows-upgrade --npm-version latest

이제 명령줄에서 설치할 버전을 선택할 수 있습니다.

https://github.com/felixrieseberg/npm-windows-upgrade

위 링크는 제가 사용한 도구입니다.이 도구는 Linux/Windows용입니다.도움이 되길 바랍니다.

잠금 파일 구성은 npm 버전에 따라 다릅니다.v7+는 잠금 파일 2를 생성하고, 아래는 잠금 파일 v1을 생성합니다.

잠금 파일 v2는 이전 버전과 호환되므로 npm < v6를 실행하는 사람들은 사용해도 괜찮지만, 제 두 번째 화면에서 서클ci 빌드 오류를 보고 있습니다. 이는 우리가 사용하는 일부 npm 패키지가 잠금 파일 v2와 호환되지 않는다는 것을 암시합니다. 즉, 오래된 npm 패키지가 잠금 파일 v2와 잘 유지되지 않고 호환되지 않을 수 있습니다.

따라서 환경을 강화하고 격리하는 것이 가장 좋은 방법일 것입니다.

이것이 도커가 발명된 이유입니다!도커 컨테이너에서 프로젝트를 실행한 다음 makefile 명령을 사용하여 프로젝트를 빌드할 수 있습니다.

.PHONY: up
up:
    $(MAKE) down
    docker-compose up -d
    $(MAKE) logs

프로젝트를 설정하기 위한 작성 파일을 사용한 다음 사용make <insert command>프로젝트를 실행/구축할 수 있습니다.하나의 명령은 다음과 같습니다.make shell모든 개발자의 npm/노드 버전이 동일한 셸 환경에 들어갑니다. npm i -g npm@latest실행되는 모든 곳에 npm을 설치하기 때문에 이에 대한 답은 아닙니다. 따라서 새로운 개발자들은 빌드의 일부가 아닌 한 여전히 해당 명령을 실행해야 합니다.

제거시를 제거해 .package-lock.json그리고 실행npm install한 번

언급URL : https://stackoverflow.com/questions/64813775/is-there-any-way-to-fix-package-lock-json-lockfileversion-so-npm-uses-a-specific

반응형