에만 중첩될 수 있습니다.
처음에는 조금 이해하기 어려울 수 있으니 사진을 보면서 이야기 나눠보세요!
1부터 시작하겠습니다. 두 번째 수준 모듈을 설치할 때 첫 번째 수준에 같은 이름의 모듈이 없으면 첫 번째 수준에 두 번째 수준 모듈을 놓습니다. level
먼저 위의 예를 단순화해 보겠습니다. 이제 프로젝트 APP 아래에는 단 하나의 첫 번째 수준 종속성 모듈 A가 있고 그 아래에는 두 번째 수준 종속성 모듈 C가 있지만 npm을 설치하면 종속성이
프로젝트 하위에 설치됩니다.
npm3의 2단계 모듈(C v1.0), 프로젝트의 1단계 디렉터리(node_modules)에 같은 이름의 모듈이 없는 경우, 첫 번째 레벨 디렉토리에 설치되므로 상위 모듈 A와 동일한 레벨을 따릅니다. 이 글의 시작 부분에 있는 종속성 트리의 논리적 구조와 물리적 구조가 다른 이유는 바로 이것입니다.
즉,
npm2에서 종속성 트리의 논리적 구조는 물리적 구조와 동일합니다
npm3에서 논리적 구조는 의 물리적 구조와 다를 수 있습니다
2에 대해 이야기합시다. 두 번째 수준 모듈을 설치할 때 동일한 이름과 동일한 버전의 모듈을 찾은 경우 첫 번째 수준에서는 해당 모듈을 직접 재사용할 수 있습니다.
1을 기반으로 1의 예를 이전의 더 복잡한 시나리오로 복원합니다. 프로젝트 아래에 두 개의 종속 모듈 A와 B가 있습니다. APP에는 또 다른 종속 모듈 Cv1.0이 있고 B에는 종속 모듈 C v1.0도 있습니다(두 C 모듈 버전은 동일함)
두 개의 C 패키지 동일하므로 모듈 중복성이 발생합니다
npm3에서는 모듈 A 아래의 C 모듈이 첫 번째 수준에 설치되므로 모듈 B를 동일한 수준에서 재사용하고 C 모듈을 동일한 이름으로 사용할 수 있습니다. 버전
npm3이 사용됩니다. 이 접근 방식은 npm2
[1, 2에서 3으로 전환] 이 섹션의 시작 부분에서 말했습니다. 논리적으로 특정 레벨의 "모든" 모듈은 프로젝트의 첫 번째 레벨에 배치됩니다. 1과 2를 읽으신 후에 어느 정도 이해하셔야 할 것 같습니다. "시도"의 의미 최선을 다해", 하지만 저는 "최선을 다하세요"라고 말했습니다. 이는 또한 npm3이 첫 번째 수준에 두 번째 수준 종속성을 넣을 수 없다는 의미이기도 합니다. 이에 대해서는 3:
을 참조하세요. 마지막으로 3: 보조 모듈을 설치할 때 첫 번째 수준에서 이름은 같지만 버전이 다른 모듈을 찾으면 아래에만 중첩될 수 있습니다. 자체 상위 모듈
2에서 A와 B가 의존하는 두 개의 C 모듈은 동일하지만, 그런데 두 C 모듈의 버전이 다르다면 어떨까요? 프로젝트 npm 설치 상황은 다음과 같습니다.
npm3에서는 B와 A에 필요한 종속 모듈이 다르기 때문에(B에 대한 요구 사항은 C v1.0이고, A에 대한 요구 사항은 C v2.0입니다. 따라서 B는 2
에서와 같이 A에서 C v1.0 모듈을 재사용할 수 없습니다. , 이 예와 저 예는 거의 똑같습니다)
이를 보면 npm2 및 npm3의 모듈 작동 메커니즘과 npm2에 대한 npm3의 최적화에 대한 일반적인 이해가 있습니다. 하지만 다음 질문에 대해 생각해 보십시오. npm3은 npm2의 모듈 중복성 결함을 극도로 최적화했습니까? ———답은 No입니다. 아래를 살펴보세요.
실제로: npm3에는 여전히 모듈 중복성이 있을 수 있습니다. 첫 번째 수준 디렉터리에 이미 v1이 있으므로 v1이 있습니다. .0 C 모듈, 따라서 모든 v2.0은 보조 종속성 모듈 으로만 설치할 수 있으므로 다음 상황을 볼 수 있습니다
그리고 다음과 같은 특별한 경우에 표시됩니다. 위 사진을 보면 npm3과 npm2 사이에 별 차이가 없는 것 같네요
【전환】그럼 해결 방법은 없을까요? 물론 모듈 A 아래의 C v1.0 모듈이 C v2.0으로 업데이트되면 npm dedupe를 통해 C v2.0의 모든 두 번째 수준 종속 모듈을 첫 번째 수준으로 "리디렉션"할 수 있습니다.
디렉토리의 v1.0
npm dedupe를 사용하여 중복 모듈 제거:
npm dedupe는 무엇을 했나요? 제거할 수 있는 중복된 두 번째 수준 종속 모듈을 동일한 이름/버전을 가진 첫 번째 수준 모듈로 "리디렉션"할 수 있습니다
References npm 공식 문서 섹션 2 (npm 작동 방식):
[따뜻한 알림]: 무거운 책과 지루한 문서에 비교할 수 있는 인기 블로그는 없습니다
【끝】
기억하다 매일 10개의 작은 단어, 축적에 중점을 둡니다!
메모리: 메모리 종속성: 종속성 제약 조건: 제약 조건 배포: 배포 매개 변수: 매개 변수 범위: 범위
ecosystems: 생태계 접두사: 접두사 이전: 우선 순위/해지 전: revoke