웹 프론트엔드 JS 튜토리얼 npm의 모듈 설치 메커니즘에 대한 자세한 소개

npm의 모듈 설치 메커니즘에 대한 자세한 소개

Jun 26, 2017 am 10:54 AM
설치하다 기구 기준 치수 상해

종속성 트리 표면의 논리적 구조와 종속성 트리의 실제 물리적 구조
종속성 트리 표면의 논리적 구조와 종속성 트리의 실제 물리적 구조는 다음과 같습니다. 반드시 같지는 않습니다!
두 가지 명령을 먼저 언급해야 합니다: tree -d(linux) 및 npm ls(npm)
npm 프로젝트에서:
tree -d 명령트리 다이어그램 사용 물리적 구조 나열 프로젝트 아래의 모든 종속성
npm ls 명령공식 문서의 트리 다이어그램
에서 프로젝트 아래의 모든 종속성의 논리적 구조를 나열합니다. 예:
프로젝트 example1에는 두 개의 종속 모듈이 있습니다: mod-a 모듈과 mod-c 모듈
mod-a 모듈에는 종속 모듈 mod-b@1.0.0 모듈이 있습니다.
mod -c 모듈에는 종속 모듈 mod가 있습니다. -b@2.0.0 module
tree -d 및 npm ls 실행 결과는 다음과 같습니다. (npm 버전은 npm2가 아닌 npm3입니다.)
먼저 아래 빨간색 상자의 결과를 살펴보세요. 이는 "우리가 이해한 것과 가장 일치하는" 종속성 트리입니다. 먼저, 첫 번째 수준 종속성은 프로젝트(mod-a 모듈 및 mod-b 모듈) 아래에 형성됩니다. 그런 다음 이 두 모듈을 상위 모듈로 사용하고 보조 종속성 모듈 mod-b@1.0.0 및 mod-b@2.0.0
을 추가하세요! 물리적으로 형성된 종속성 트리는 위의 빨간색 상자와 다릅니다. mod-a, mod-c 및 mod-b는 실제로 동일한 수준의 종속성입니다.
왜 이런 종속성 트리가 형성되나요? 아래에 설명하겠습니다
【참고】: 다음 다이어그램은 모두 종속성 트리의 물리적 구조이지 논리적 구조가 아닙니다
npm 모듈 설치 메커니즘 정보 약간의 추측 en 모듈을 설치할 때는 두 가지 가능한 방법이 있습니다. 우리는 완전 수평 설치 방식을 채택하고 있습니까? ——못해
위와 유사한 예를 들어보겠습니다. 프로젝트 APP에는 두 개의 종속 모듈 A와 B가 있습니다. A에는 종속 모듈 Cv1.0이 있고 B에도 종속 모듈 Cv2.0이 있습니다. 분명히 동일한 node_modules 아래에 동시에 존재할 수는 없습니다. 설치 시 npm 메커니즘으로 인해 종속 모듈의 한 버전만 설치할 수 있으며, 그 중 하나가 다른 버전을 덮어씁니다. 그러나 하나의 C 의존 모듈 버전을 설치하면 모듈 A와 모듈 B가 위의 이유로 npm2는 중첩 설치 방법을 선택했습니다. -

npm2
npm2의 모듈 설치 메커니즘은 중첩 설치 방법을 사용하여 다중 레벨 종속 모듈을 설치합니다.
장점과 단점
장점: 단일 버전 사용 시 발생하는 비호환 문제 해결,
다중 버전 호환성 확보
단점: 다음과 같이 동일한 모듈의
대규모 중복성
이 발생할 수 있습니다.
위의 예를 예로 들면 다음과 같은 상황도 타당합니다.
느낌으로 압니다. 이는 좋은 현상이 아닙니다. 그렇다면 종속성 간의 다중 버전 호환성을 달성하면서 이 모듈 중복성을 어떻게 줄일 수 있습니까? 그래서 npm3은 몇 가지 개선을 했습니다
npm3의 모듈 설치 메커니즘:
npm3과 npm2의 차이점은 주로 보조 모듈 설치에 반영됩니다.
npm3 will
"Try to"
모든 모듈을 논리적, 물리적으로 프로젝트의 첫 번째 레벨에 넣으세요. 구체적으로 다음 세 가지 상황으로 요약할 수 있습니다.
1. 특정 2차 레벨 모듈, 첫 번째 레벨 에 아직 동일한 이름의 모듈
이 없는 것으로 확인되면 2차 레벨 모듈을 첫 번째 레벨
에 배치합니다. 2. 특정 두 번째 수준 모듈을 설치할 때 첫 번째 수준 의 이름과 버전이 동일한 모듈을 발견하면 해당 모듈을 직접 재사용합니다
3. 특정 두 번째 수준 모듈이 발견되었을 때 첫 번째
수준 의 이름은 같지만 모듈 의 다른 버전이 발견된 경우 는 자체 상위 모듈 에만 중첩될 수 있습니다.
처음에는 조금 이해하기 어려울 수 있으니 사진을 보면서 이야기 나눠보세요!
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
 

위 내용은 npm의 모듈 설치 메커니즘에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Win11 시스템에서 중국어 언어 팩을 설치할 수 없는 문제에 대한 해결 방법 Win11 시스템에서 중국어 언어 팩을 설치할 수 없는 문제에 대한 해결 방법 Mar 09, 2024 am 09:48 AM

Win11 시스템에서 중국어 언어 팩을 설치할 수 없는 문제에 대한 해결 방법

VirtualBox에 게스트 추가 기능을 설치할 수 없습니다 VirtualBox에 게스트 추가 기능을 설치할 수 없습니다 Mar 10, 2024 am 09:34 AM

VirtualBox에 게스트 추가 기능을 설치할 수 없습니다

Baidu Netdisk를 성공적으로 다운로드했지만 설치할 수 없는 경우 어떻게 해야 합니까? Baidu Netdisk를 성공적으로 다운로드했지만 설치할 수 없는 경우 어떻게 해야 합니까? Mar 13, 2024 pm 10:22 PM

Baidu Netdisk를 성공적으로 다운로드했지만 설치할 수 없는 경우 어떻게 해야 합니까?

Linux에 Android 앱을 설치하는 방법은 무엇입니까? Linux에 Android 앱을 설치하는 방법은 무엇입니까? Mar 19, 2024 am 11:15 AM

Linux에 Android 앱을 설치하는 방법은 무엇입니까?

Win11에서 관리자 권한을 얻는 방법에 대한 자세한 설명 Win11에서 관리자 권한을 얻는 방법에 대한 자세한 설명 Mar 08, 2024 pm 03:06 PM

Win11에서 관리자 권한을 얻는 방법에 대한 자세한 설명

Oracle SQL의 나누기 연산에 대한 자세한 설명 Oracle SQL의 나누기 연산에 대한 자세한 설명 Mar 10, 2024 am 09:51 AM

Oracle SQL의 나누기 연산에 대한 자세한 설명

Ubuntu 24.04에서 Ubuntu Notes 앱을 설치하고 실행하는 방법 Ubuntu 24.04에서 Ubuntu Notes 앱을 설치하고 실행하는 방법 Mar 22, 2024 pm 04:40 PM

Ubuntu 24.04에서 Ubuntu Notes 앱을 설치하고 실행하는 방법

Ubuntu 24.04에 Podman을 설치하는 방법 Ubuntu 24.04에 Podman을 설치하는 방법 Mar 22, 2024 am 11:26 AM

Ubuntu 24.04에 Podman을 설치하는 방법

See all articles