programing

npm install --legacy-peer-deps는 정확히 무엇을 합니까?언제가 권장됩니까? / 어떤 사용 사례가 있을 수 있습니까?

newsource 2022. 9. 17. 10:02

npm install --legacy-peer-deps는 정확히 무엇을 합니까?언제가 권장됩니까? / 어떤 사용 사례가 있을 수 있습니까?

방금 다음 오류가 발생했습니다.

npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR! 
npm ERR! While resolving: nexttwin@0.1.0
npm ERR! Found: react@17.0.1
npm ERR! node_modules/react
npm ERR!   react@"17.0.1" from the root project
npm ERR! 
npm ERR! Could not resolve dependency:
npm ERR! peer react@"^16.8.0" from react-hook-mousetrap@2.0.4
npm ERR! node_modules/react-hook-mousetrap
npm ERR!   react-hook-mousetrap@"*" from the root project
npm ERR! 

설치하려는 모듈이 설치한 모듈과 다른 피어 종속성을 가지고 있는 것 같습니다.이 점에서 npm이 동작을 변경하여 설치가 실패하게 된 것 같습니다.

이 문제를 해결하려면 어떻게 해야 하나요?이 때문에 React 버전을 다운그레이드하고 싶지 않습니다.

하는 깃발이 있습니다.--legacy-peer-deps하지만 이게 정확히 어떤 역할을 하는지, 그리고 그것을 사용하는 것이 권장되는지/ 잠재적인 단점은 무엇인가요?하게 한 입니다.npm은 설치 실패의 원인이 될 수 .

이상할 뿐인데, 왜냐하면yarn★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

TL;DR:

NPM v6/Node v12에서 업그레이드하는 경우 이 답변이 나타날 수 있습니다.

  • NPM v7+ 는, 디폴트로 peerDependencies 를 인스톨 합니다.이전 버전의 NPM에서는 그렇지 않습니다.
  • NPM 모듈은 peerDependencies의 특정 버전을 지정해야 합니다.
  • 이미 peer Dependency가 설치되어 있지만 모듈에 의해 명명된 버전이 없는 경우 NPM v7+는 오류를 발생시킵니다.
  • " " " --legacy-peer-deps.

--legacy-peer-deps는 peerDependency 설치 동작을 NPM v4에서v6로 복원합니다.

이 플래그를 생각할 때 NPM v7은 기본적으로 peer Dependencies를 설치하므로 새로운 작업을 수행하지 않도록 NPM에게 지시하는 것입니다.

대부분의 경우 버전 경합으로 인해 설치 프로세스가 중단됩니다.

--legacy-peer-depspeerDependency 자동 설치를 바이패스하는 방법으로 v7에서 플래그가 도입되었습니다.이 플래그는 피어 디프를 무시하고 설치를 진행하도록 NPM에게 지시합니다.이것이 NPM v4에서 v6까지의 상황입니다.

일반 Dep와 Peer Dep의 차이를 잘 모르는 경우는, 다음의 몇개의 콘텍스트를 참조해 주세요.

의존관계와 피어 의존관계

의존관계: NPM 모듈이 실가동하기 위해 필요한 라이브러리 또는 모듈(예:최근 Chance.js를 사용하여 지정된 범위 내의 난수를 계산하는 파이 그래프를 만들었습니다.따라서 Chance는 모듈의 종속성이 됩니다.)

피어 의존성:피어 의존관계는 모듈이 동작하도록 설계된 서드파티 소프트웨어 라이브러리의 특정 버전 또는 버전 세트입니다.브라우저 확장과 브라우저의 관계와 유사한 개념입니다.(예: react-redux에는 2개의 논리적인 peerDependencies가 있습니다.react그리고.redux.)

이 문제는 부분적으로 React v17에 의해 발생합니다.

React v17을 peer Dependency로 특별히 추가하지 않은 모듈 수가 많기 때문에 현재 이러한 모듈에서는unable to resolve dependency treev17 React 응용 프로그램 내에서 npm 설치를 실행할 때 오류가 발생합니다.

이 오류는 모듈(또는 모듈 자체의 종속성 중 하나)이 React v17을 특별히 포함하지 않고 이전 버전의 React를 peerDependency로 나열할 때마다 발생합니다.

(주의: 다른 프레임워크 또는 라이브러리의 메이저버전 업데이트에서도 같은 동작이 발생합니다).

지정된 모듈의 peerDependencies를 체크하는 방법

NPM 자체는 특정 모듈의 페이지에 피어 디프를 나열하지 않습니다.단, 설치 전 또는 설치 후에 피어 디프를 확인하는 간단한 회피책이 있습니다.간단한 실행:

npm info name-of-module peerDependencies

이 명령어는 각 peerDependency의 이름과 호환되는 모든 버전을 반환합니다.

이 문제를 해결한 방법은 다음과 같습니다.

번째로 리액트 훅 마우스랩은 react@16.8.0을 찾고 있지만 찾지 못하고 있습니다.대신 새로운 버전인 @react 17.0.1을 찾습니다.어떤 이유에서인지 쥐덫은 이 새로운 버전을 좋아하지 않으며, 당신에게 통지됩니다(별건 아니지만, 그들은 당신의 빌드를 중단할 가치가 있다고 판단했습니다).

가지 해결책: 마우스랩이 원하는 특정 버전의 리액션을 강제로 설치합니다.

yarn add react@16.8.0

이렇게 하면 리액트 버전이 마우스랩과 호환되는 약간 오래된 버전으로 롤백됩니다.어떤 차이도 눈치채지 못할 것입니다.앞으로 반복할 때는 쥐덫이 갱신되어 없어지길 바랍니다.

다른 해결책: 구버전의 의존관계를 설치하지 않기로 전면적으로 결정합니다.

npm add xxxx --legacy-peer-deps

이렇게 하면 이 패키지에 대한 오래된 종속성이 무시됩니다.보다 포괄적이고 많은 결정을 내릴 수 있습니다.

패키지에 다음 사항을 추가해서 (실로)json

"resolutions": {
    "**/react": "17.0.2",
    "**/react-dom": "17.0.2"
},

이전 종속성 설치를 차단하지 않으려면 실행 중인 스크립트를 강제로 실행하여 npm이 이러한 경고를 무시하도록 할 수 있습니다. --force

--leagcy-peer-deps는, 의존 , 에 관한 해, 개발자가 하는 것을 합니다.경합이 , 「dep」 이외의 .--legacy-peer-deps하다, 사용하다, 사용하다, 사용하다, 사용하다, 사용하다, 사용하다, 사용하다--force
피어 부문 경합을 처리하는 공식 문서는 다음과 같습니다.

2011년
위의 정답을 맞혀보세요.--leagcy-peer-deps는 v4~v6가 아닌 NPM v3~v6에서 peerDependency 설치 동작을 복원합니다.

언급URL : https://stackoverflow.com/questions/66239691/what-does-npm-install-legacy-peer-deps-do-exactly-when-is-it-recommended-wh