grunt-contrib-jasmine
NPM 패키지 를 사용하고 싶습니다 . 다양한 의존성이 있습니다. 종속성 그래프의 일부는 다음과 같습니다.
─┬ 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
해야합니까?
몇 가지 추가 컨텍스트 :
grunt-contrib-jasmine
명시 적으로 버전 요구"~0.2.0"
의grunt-lib-phantomjs
명시 적 버전이 필요합니다,"~1.8.1"
의를phantomjs
.phantomjs
패키지의 의존성에 먼저 추가해도 아무런 효과가 없습니다. 두 버전이 모두 설치되어 있고grunt-contrib-jasmine
이전 버전을 계속 사용합니다 ( NPM과 함께 패키지를 설치할 때 다른 버전의 종속성 중 하나를 사용하도록 지시 할 수 있습니까? 참조 ).
답변
종속성 또는 하위 종속성을 재정의하기 위해 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"
섹션 에서 라이브러리를 제거하고 “종속성”아래에 추가하십시오.
예를 들어 deglob
package에서 현재 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 솔루션이 작동하지 않았으므로 중첩 된 종속성 버전을 무시하기 위해 수행 한 작업은 다음과 같습니다.
- package-lock.json의 ‘requires’섹션에서 중첩 된 종속성을 제거하십시오.
- package.json의 DevDependencies 아래에 업데이트 된 종속성을 추가하여 필요한 모듈이 계속 액세스 할 수 있도록하십시오.
- 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’파일이 다시 수정됩니다.
답변
