NPM 모듈 설치 메커니즘을 소개, 왜 NPM 입력 해당 모듈이 자동으로 설치 될 수있다 설치 것인가?

메커니즘을 장착 1. NPM 모듈 :

  • 실행 npm install명령을
  • 디렉토리 조회 node_modules의 특정 모듈이 있는지 여부
    • 더 이상이 있으면 다시 설치하지
    • 만약이
      • 레지스트리 쿼리 모듈 압축 패키지 NPM의 URL
      • 의 루트 디렉토리에 저장된 아카이브, 다운로드 .npm디렉토리를
      • 현재 프로젝트에 아카이브를 추출 node_modules디렉토리

2. NPM 구현 원리

NPM 입력 한 후 (예를 들면, NPM 5.5.1로) 다음 단계를 통해 이동 명령을 설치하고 Qiaoxia는 입력 :

  1. 그 자체가 사전 설치 프로젝트의 구현

정의 된 현재 프로젝트 NPM은 후크를 사전 설치할 경우,이 시간이 실행됩니다.

  1. 먼저 바닥 의존성 결정 모듈

우선, 즉, 1 층에 따라 프로젝트를 결정하기 위해 수행하는 직접 (더 추가 NPM 매개 변수를 설치하지 가정) 모듈을 지정 종속성 및 devDependencies 속성입니다 필요합니다.

프로젝트 자체가 나무의 곡물에 의존 루트, 각 모듈은 다중 노드 프로세스를 엽니 다 NPM은 점차적으로 각 모듈에서 깊은 수준은 1 층에 따라 발견하기 시작했다 루트 노드 아래에 서브 트리의 1 층에 따라 달라집니다.

  1. 취득 모듈

수집 모듈은 다음과 같은 단계로 나누어 순환 과정이다 :

  • 취득 모듈 정보를 제공합니다. 모듈을 다운로드하기 전에, 우리는 먼저 package.json는 의미 버전 (semver, 의미 론적 버전)이기 때문에 그것은 종종, 버전을 확인해야합니다. 모듈 버전 정보 설명 파일 창고에서 얻을 수없는 경우에 당신이 직접 취할 수 (NPM-shrinkwrap.json 또는 패키지 lock.json)이 있으면이 시점에서. 이러한 패키지 ^ 1.1.0에서 버전 packaeg.json로, NPM은 협정 1.xx에는 양식의 최신 버전을 얻기 위해 창고로 이동합니다.
  • 취득 모듈 엔티티. 아카이브 모듈 주소 (해결 필드)에 도착 Previous'll, NPM이 주소로 로컬 캐시를 확인합니다 캐시는 창고로부터 다운로드가없는 경우, 직접을한다.
  • 다음 중지하지 않을 경우, 1 단계로 리턴에 의존이있는 경우 모듈이 달려 찾을 수 있습니다.
  1. 평탄화 모듈 (중복 제거 등)

이전 단계에서 획득하는 것은 반복 모듈의 큰 숫자를 포함 할 수있는 완전한 의존성 트리입니다. 모듈은 loadsh에 따라, B 모듈은 lodash에 의존한다. 이전 npm3에 설치된 트리 구조에 따라 엄격하게 따라 달라집니다, 그것은 모듈 중복의 원인이됩니다.

시작 npm3 기본에서 중복 제거의 과정에 합류했다. 그것은 하나, 즉 제 레이어 노드 모듈에 의해 하나의 모듈에서 루트 노드 아래에있는 모든 노드를 통과한다. 모듈이 중복 발견되었을 때, 그것은 삭제됩니다.

이 같은 모듈 이름과 semver 호환을 참조 반복 모듈의 정의해야합니다. 두 모듈의 버전이 다음 호환 버전을 얻을 수있는 존재하는 교차로의 범위를 허용하는 경우, 각각의 기간은, 허용 범위 버전 semver 대응하고, 버전 번호보다 용장 모듈 공정 중복 제거에서 제거 할 수있는, 동일하지 않아도 .

예를 들어, 모듈의 종속성 lodash @는 노드 모듈 ^ 1.0.0 바 모듈 종속성 lodash@^1.1.0가 ^ 호환 버전 1.1.0 foo를이다.

푸 lodash @ ^ 2.0.0, 바 의존 lodash@^1.1.0 의존 때, 호환되는 버전이없는 둘 semver 규칙에 따라. 그것은 node_modules에 버전이 될 것이며, 다른 하나는 나무에 의존 남아있다.

예를 들어, 원래 종속성 트리라고 가정한다 :

node_modules
- foo는
---- lodash @ 버전 1

- 바
---- lodash @ 버전 2

버전 1의 버전 2 가정 및 중복 제거는 다음과 같은 형태가 될 것입니다 후, 호환 가능한 버전입니다 :

node_modules
- foo는

- 바

- lodash (예약 된 버전 호환 버전)

가정하자 버전 1의 버전 2와 호환되지 않는 버전은 버전은 종속성 트리의 뒤쪽에 남아있다 :

node_modules
- foo는
- lodash @ 버전 1

- 바
---- lodash @ 버전 2

  1. 설치 모듈

함수의 라이프 사이클이 프로젝트 node_modules을 업데이트합니다 단계 및 실행 모듈 (주문 사전 설치에는 사후의 설치).

  1. 프로젝트 라이프 사이클 자체의 구현

이 시간이 실행되는 현재 프로젝트 NPM 후크를 정의하는 경우 (설치, 사후, prepublish을, 순서를 준비하기에 따라).

마지막 단계는 생성하거나 나중에 프로필, NPM 프로세스가 완료 설치하는 것입니다.

참조 http://www.ruanyifeng.com/blog/2016/01/npm-install.html를

https://www.bbsmax.com/A/qVdemmnEdP/

https://www.zhihu.com/question/66629910

추천

출처www.cnblogs.com/wangxi01/p/11202584.html