[node.js] 중첩 된 NPM 종속성 버전을 재정의하려면 어떻게합니까?

grunt-contrib-jasmineNPM 패키지 를 사용하고 싶습니다 . 다양한 의존성이 있습니다. 종속성 그래프의 일부는 다음과 같습니다.

─┬ grunt-contrib-jasmine@0.4.1
  ├─┬ grunt-lib-phantomjs@0.2.0
   ├─┬ phantomjs@1.8.2-2

불행히도이 버전 phantomjs에는 Mac OS X에 제대로 설치되지 못하게 하는 버그가 있습니다.이 문제는 최신 버전에서 수정되었습니다.

grunt-lib-phantomjs최신 버전을 사용하려면 어떻게 phantomjs해야합니까?

몇 가지 추가 컨텍스트 :



답변

종속성 또는 하위 종속성을 재정의하기 위해 npm shrinkwrap 기능을 사용할 수 있습니다 .

방금 우리 프로젝트에서이 작업을 수행했습니다. 2.7.3부터 최신 버전의 연결이 필요했습니다. 우리에게 문제를 일으켰습니다. 그래서 npm-shrinkwrap.json이라는 파일을 만들었습니다.

{
  "dependencies": {
    "grunt-contrib-connect": {
      "version": "0.3.0",
      "from": "grunt-contrib-connect@0.3.0",
      "dependencies": {
        "connect": {
          "version": "2.8.1",
          "from": "connect@~2.7.3"
        }
      }
    }
  }
}

프로젝트를 설치하는 동안 npm이 자동으로 선택합니다.

( https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/ 참조 )


답변

2018 이상 버전의 경우 npm 버전 5 이상을 사용하십시오 package-lock.json. 편집 : "requires"섹션 에서 라이브러리를 제거하고 “종속성”아래에 추가하십시오.

예를 들어 deglobpackage에서 현재 glob버전 3.2.11대신 패키지 버전 을 사용 하려고 합니다 . 당신은 열고 package-lock.json볼 :

"deglob": {
  "version": "2.1.0",
  "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
  "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
  "requires": {
    "find-root": "1.1.0",
    "glob": "7.1.2",
    "ignore": "3.3.5",
    "pkg-config": "1.1.1",
    "run-parallel": "1.1.6",
    "uniq": "1.0.1"
  }
},

제거 "glob": "7.1.2",에서 "requires"추가, "dependencies"적절한 버전 :

"deglob": {
  "version": "2.1.0",
  "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
  "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
  "requires": {
    "find-root": "1.1.0",
    "ignore": "3.3.5",
    "pkg-config": "1.1.1",
    "run-parallel": "1.1.6",
    "uniq": "1.0.1"
  },
  "dependencies": {
    "glob": {
      "version": "3.2.11"
    }
  }
},

이제 node_modules폴더를 제거 하고 실행 npm install하면 누락 된 부분이 "dependencies"섹션에 추가됩니다 .


답변

실을 사용하는 사람들을 위해.

원사 cli가 내 npm-shrinkwrap.json 파일을 무시한 것을 알 때까지 npm shrinkwrap을 사용해 보았습니다.

Yarn은 https://yarnpkg.com/lang/en/docs/selective-version-resolutions/ 를 가지고 있습니다 . 산뜻한.

이 답변도 확인하십시오 : https://stackoverflow.com/a/41082766/3051080


답변

중첩 된 종속성 중 하나에 npm 감사 취약성이있는 문제가 있었지만 여전히 부모 종속성 버전을 유지하려고했습니다. npm shrinkwrap 솔루션이 작동하지 않았으므로 중첩 된 종속성 버전을 무시하기 위해 수행 한 작업은 다음과 같습니다.

  1. package-lock.json의 ‘requires’섹션에서 중첩 된 종속성을 제거하십시오.
  2. package.json의 DevDependencies 아래에 업데이트 된 종속성을 추가하여 필요한 모듈이 계속 액세스 할 수 있도록하십시오.
  3. npm 전

답변

NPM shrinkwrap 은이 문제에 대한 훌륭한 솔루션을 제공합니다. 특정 하위 모듈의 특정 종속성 버전을 재정의 할 수 있습니다.

기본적으로 npm install을 실행하면 npm은 먼저 루트 디렉토리에서 npm-shrinkwrap.json 파일이 있는지 확인합니다. 만약 그렇다면, 우선 이것을 사용하여 패키지 의존성을 결정한 다음 package.json 파일을 통한 정상적인 작업 프로세스로 넘어갑니다.

npm-shrinkwrap.json을 만들려면

 npm shrinkwrap --dev

암호:

{
  "dependencies": {
    "grunt-contrib-connect": {
      "version": "0.3.0",
      "from": "grunt-contrib-connect@0.3.0",
      "dependencies": {
        "connect": {
          "version": "2.8.1",
          "from": "connect@~2.7.3"
        }
      }
    }
  }
}


답변

나는 나를 위해 일한 해결책을 찾았다.

그래서. 먼저 다른 모든 솔루션을 권장하는대로 npm-shrinkwrap.json 파일을 편집하십시오.

그런 다음 (Windows) :

  • ‘npm-shrinkwrap.json’파일을 마우스 오른쪽 버튼으로 클릭하십시오.
  • 속성
  • 속성에서 ‘읽기 전용’을 선택하십시오.
    이것은 npm이 mpn-shrinkwrap.json 파일을 수정하지 못하게합니다.

‘npm install’작업을 한 번만 수행하면 제안 된 다른 솔루션으로는 충분합니다. 그러나 첫 번째 ‘npm install’후에는 수정 전과 같이 ‘npm-shrinkwrap.json’파일이 다시 수정됩니다.


답변