npm: '--force'와 '--legacy-peer-deps'를 사용할 때
나는 어떻게 그것을 재현하는지 이해하려고 노력하고 있습니다.node_modules
배포를 위한 디렉터리가 작동합니다.
사용중다니입을 사용합니다.npm ci
에 npm install
배포 중에 깨끗한 슬레이트를 보장합니다.그러나 플래그 없이 실행하면 다음 오류가 발생합니다.
업스트림 종속성 충돌을 수정하거나 --force 또는 --legacy-peer-deps를 사용하여 이 명령을 다시 시도하여 잘못된 종속성 확인을 수락합니다.
다음에 대한 설명서npm install
위해서--force
다음과 같습니다(에 플래그가 없습니다).npm ci
의 페이지):
-for --force 인수는 디스크에 로컬 복사본이 있더라도 npm이 원격 리소스를 가져오도록 합니다.
한편, 다에대문에 대한 --legacy-peer-deps
다음과 같이 말합니다.
--legacy-peer-deps: npm 버전 4 ~ 버전 6의 스타일로 설치할 때 모든 peerDependencies를 무시합니다.
두 깃발 모두가 할 수 있을 것 같습니다.npm ci
합니다.node_modules
문제가 없는 디렉토리입니다만, 저는 여전히 둘 사이의 차이점에 대해 잘 모르겠습니다.
제가 알기로는--force
마지막 종속성이 제한된 종속성을 기반으로 하며 이전에 다운로드한 종속성을 덮어씁니다.사이에 한편.--legacy-peer-deps
문제가 없더라도 설치하는 동안 피어 종속성을 항상 건너뜁니다.
두 깃발의 차이점은 무엇이며, 언제 사용해야 합니까?
의 새 으로 npm(v7)이 됩니다.npm install
충돌하는 peerDependencies가 발생하면 실패합니다.전에는 그렇지 않았습니다.
npm v7의 피어 종속성에 대한 자세한 내용은 여기를 참조하십시오.
두 가지 차이점은 다음과 같습니다.
--legacy-peer-deps
설치 시 모든 peerDependencies를 무시합니다(npm 버전 4 ~ 버전 6).--strict-peer-deps
충돌하는 피어 종속성에 대한 설치 프로세스가 실패하고 중단됩니다.기본적으로 npm은 루트 프로젝트의 직접적인 종속성으로 인해 발생하는 peerDependencies 충돌에 대해서만 충돌합니다.--force
로컬 복사본이 디스크에 있더라도 npm이 원격 리소스를 가져오도록 합니다.
기사에서 npm 7은 이제 일반적으로 사용할 수 있습니다!,
하여 다시 .
--force
하거나 갈을우거나회하등▁the▁to나▁bypass거우회.--legacy-peer-deps
피어 종속성을 완전히 무시하는 명령입니다(이 동작은 버전 4-6과 유사함).
저는 이 문장이 정말 명확하지 않다는 것에 동의하지만, "동료들의 의존성을 완전히 무시하라"는 것은 좋게 들리지 않습니다.실제 예를 사용해 보겠습니다.
다음은 피어 종속성 오류입니다.npm install
:
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving: mobile@undefined
npm ERR! Found: react@17.0.1
npm ERR! node_modules/react
npm ERR! react@"17.0.1" from the root project
npm ERR! peer react@">=16.0.0" from @testing-library/react-native@7.2.0
npm ERR! node_modules/@testing-library/react-native
npm ERR! dev @testing-library/react-native@"7.2.0" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer react@"16.13.1" from react-native@0.63.2
npm ERR! node_modules/react-native
npm ERR! react-native@"https://github.com/expo/react-native/archive/sdk-39.0.4.tar.gz" from the root project
npm ERR! peer react-native@">=0.59" from @testing-library/react-native@7.2.0
npm ERR! node_modules/@testing-library/react-native
npm ERR! dev @testing-library/react-native@"7.2.0" from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR!
npm ERR! See /Users/me/.npm/eresolve-report.txt for a full report.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/me/.npm/_logs/2021-03-13T00_10_33_813Z-debug.log
npm ERR! code 1
npm ERR! path /Users/me/my-app
npm ERR! command failed
npm ERR! command sh -c sh ./bin/setup.sh
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/me/.npm/_logs/2021-03-13T00_10_33_860Z-debug.log
아래는 package-lock.json 차이입니다.--legacy-peer-deps
그리고.--force
.
- 내가 뛰면,
npm install --legacy-peer-deps
내 package-lock.json에 이것을 추가합니다.
"node_modules/@unimodules/react-native-adapter": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-5.7.0.tgz",
"integrity": "sha512-L557/+sc8ZKJVgo1734HF1QNCxrt/fpqdmdNgySJT+kErux/AJNfPq3flsK0fyJduVmniTutYIMyW48cFoPKDA==",
"dependencies": {
"invariant": "^2.2.4",
"lodash": "^4.5.0"
},
"peerDependencies": {
"react-native": "*",
"react-native-web": "~0.13.7"
}
},
...
"@unimodules/react-native-adapter": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-5.7.0.tgz",
"integrity": "sha512-L557/+sc8ZKJVgo1734HF1QNCxrt/fpqdmdNgySJT+kErux/AJNfPq3flsK0fyJduVmniTutYIMyW48cFoPKDA==",
"requires": {
"invariant": "^2.2.4",
"lodash": "^4.5.0"
}
},
- 사용할 경우
npm install --force
대신에, 그것은 덧붙입니다.
"node_modules/expo/node_modules/@unimodules/react-native-adapter": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-5.7.0.tgz",
"integrity": "sha512-L557/+sc8ZKJVgo1734HF1QNCxrt/fpqdmdNgySJT+kErux/AJNfPq3flsK0fyJduVmniTutYIMyW48cFoPKDA==",
"dependencies": {
"invariant": "^2.2.4",
"lodash": "^4.5.0"
},
"peerDependencies": {
"react-native": "*",
"react-native-web": "~0.13.7"
}
},
"node_modules/expo/node_modules/inline-style-prefixer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-5.1.2.tgz",
"integrity": "sha512-PYUF+94gDfhy+LsQxM0g3d6Hge4l1pAqOSOiZuHWzMvQEGsbRQ/ck2WioLqrY2ZkHyPgVUXxn+hrkF7D6QUGbA==",
"peer": true,
"dependencies": {
"css-in-js-utils": "^2.0.0"
}
},
"node_modules/expo/node_modules/react-native-web": {
"version": "0.13.18",
"resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.13.18.tgz",
"integrity": "sha512-WR/0ECAmwLQ2+2cL2Ur+0/swXFAtcSM0URoADJmG6D4MnY+wGc91JO8LoOTlgY0USBOY+qG/beRrjFa+RAuOiA==",
"peer": true,
"dependencies": {
"array-find-index": "^1.0.2",
"create-react-class": "^15.6.2",
"deep-assign": "^3.0.0",
"fbjs": "^1.0.0",
"hyphenate-style-name": "^1.0.3",
"inline-style-prefixer": "^5.1.0",
"normalize-css-color": "^1.0.2",
"prop-types": "^15.6.0",
"react-timer-mixin": "^0.13.4"
},
"peerDependencies": {
"react": ">=16.5.1",
"react-dom": ">=16.5.1"
}
},
...
"dependencies": {
"@unimodules/react-native-adapter": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-5.7.0.tgz",
"integrity": "sha512-L557/+sc8ZKJVgo1734HF1QNCxrt/fpqdmdNgySJT+kErux/AJNfPq3flsK0fyJduVmniTutYIMyW48cFoPKDA==",
"requires": {
"invariant": "^2.2.4",
"lodash": "^4.5.0"
}
},
"inline-style-prefixer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-5.1.2.tgz",
"integrity": "sha512-PYUF+94gDfhy+LsQxM0g3d6Hge4l1pAqOSOiZuHWzMvQEGsbRQ/ck2WioLqrY2ZkHyPgVUXxn+hrkF7D6QUGbA==",
"peer": true,
"requires": {
"css-in-js-utils": "^2.0.0"
}
},
"react-native-web": {
"version": "0.13.18",
"resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.13.18.tgz",
"integrity": "sha512-WR/0ECAmwLQ2+2cL2Ur+0/swXFAtcSM0URoADJmG6D4MnY+wGc91JO8LoOTlgY0USBOY+qG/beRrjFa+RAuOiA==",
"peer": true,
"requires": {
"array-find-index": "^1.0.2",
"create-react-class": "^15.6.2",
"deep-assign": "^3.0.0",
"fbjs": "^1.0.0",
"hyphenate-style-name": "^1.0.3",
"inline-style-prefixer": "^5.1.0",
"normalize-css-color": "^1.0.2",
"prop-types": "^15.6.0",
"react-timer-mixin": "^0.13.4"
}
}
}
},
보시다시피.npm install --force
여전히 더 엄격한 많은 종속성 버전을 고정합니다.
어느 것이 더 안전한지 궁금해하는 사람들에게 답은--force
--legacy-peer-deps
피어 종속성을 완전히 무시하므로 종속성 확인이 손상될 수 있습니다.
--force
반면에, 서로 충돌하는 종속성에 대해 다른 피어 종속성 버전을 설정하기만 하면
그러나 각 종속 버전이 추가 공간을 차지하기 때문에 힘을 사용하는 것이 항상 이상적인 것은 아닙니다.많은 종속성을 가진 힘을 사용하면 필요한 총 공간이 상당히 증가합니다.
npm 피어 종속성 오류를 제거하거나 피어 종속성을 무시하는 임시 해결 방법을 사용하려면 --legacy-peer-deps를 사용하지만 충돌하는 피어 종속성 트리와 다른 피어 종속성 트리를 설정하려면 --force를 사용합니다.여기에서 자세한 정보 찾기
언급URL : https://stackoverflow.com/questions/66020820/npm-when-to-use-force-and-legacy-peer-deps
'programing' 카테고리의 다른 글
Spring Boot Test 1.5에서 런타임 로컬 서버 포트를 설정할 수 없음 (0) | 2023.07.26 |
---|---|
오라클의 기존 테이블에서 addl 스크립트를 생성하거나 가져올 수 있는 방법은 무엇입니까?하이브에서 다시 만들어야 합니다. (0) | 2023.07.26 |
다트에서 문자열의 첫 글자를 대문자로 사용하는 방법은 무엇입니까? (0) | 2023.07.26 |
php-7로 업그레이드한 후 "정의되지 않은 함수 mysql_connect()로 호출" (0) | 2023.07.26 |
뮤텍스 잠금 스레드 (0) | 2023.07.26 |