npm 설치는 어떻게 내부에서 작업합니까?
11255 단어 npmjavascriptnode
이 글은 다음 내용을 이해하는 데 도움이 될 것이다.
npm install
.node_modules
폴더 구조.다음 중 하나를 설치하여 다음 예시를 시험적으로 사용하시오.
우리가
npm install
를 집행할 때 무슨 일이 일어날까요?명령
npm install
이 npm 등록표에서 의존 모듈을 다운로드하는 것을 우리는 모두 알고 있다.이것은 아래의 어떤 방식으로도 실현할 수 있다.
npm install
- 의존 관계 트리에서 언급한 모든 의존 관계를 가져옵니다.npm install <dependency_name>
또는 npm install <dependency_name>@<version>
- 이름과 버전별로 특정 의존항을 가져옵니다(버전이 지정되지 않으면 최신 버전을 가져옵니다).npm install <git remote url>
- github,bitbucket 또는gitlab로 전송되는 라이브러리를 가져옵니다.npm install
의 작업을 단순화하는 알고리즘:node_modules
확인하고 관계 트리(폴더 구조)에 의존하는 기존 폴더, 복제 트리(또는 빈 트리 생성)를 추적합니다.package-lock.json
의 폴더 구조:npm에서 따르는 폴더 구조는 다음과 같이 변경됩니다.
이 간단한 예는 어떤 JS 프레임워크 프로그램도 처음 시작할 때 의존 관계가 없고 하나씩 추가하는 것이다.
이 경우 종속 항목은 다음과 같은 설치 순서로 다운로드됩니다.
예: 새 응용 프로그램에서 실행
package.json
.여기
node_modules
는 의존항으로 npm install <B>
에 내부 의존항이 있다고 가정하면 모두 B
의 루트 단계에 설치되어 있다.추론: 모든 의존항과 내부 의존항은 노드 모듈의 뿌리에서 자리를 잡으려고 시도한다. 같은 의존항과 충돌이 존재하지 않는 한 버전이 다르다.
노드 단위
|_B
|[email protected]
2. 기존 노드 모듈 또는 패키지 잠금이 없습니다.하지만 가방.종속성 목록이 있는 json에서는 다음을 사용할 수 있습니다.
이 경우, 프로그램의 의존 항목은 패키지에 열거됩니다.파일을 잠그는 json이 없습니다.
예: 패키지가 포함된 응용 프로그램 디렉토리에서 실행
[email protected]
합니다.다음과 같은 종속성이 있는 json:{
"dependencies": {
"A": "1.0.0",
"B": "2.0.0"
}
}
여기node_modules
는 내부npm install
에 의존하고A
는 [email protected]
에 의존한다.추론: 모든 의존항과 내부 의존항은 노드 모듈의 뿌리에서 자리를 잡으려고 시도한다. 같은 의존항과 충돌이 존재하지 않는 한 버전이 다르다.충돌이 발생하면 필요한 모든 의존항 아래에 하위 노드 modules를 생성하고 충돌의 내부 라이브러리를 전송합니다.
노드 단위
|_A
|_α@v1.0
|_B
| uu 노드 u 모듈
| [email protected]
3. 기존 노드 모듈이 없지만 패키지 잠금.제이슨과 가방.종속성 목록이 있는 json에서는 다음을 사용할 수 있습니다.
가령
B
내부는 [email protected]
에 의존하고 A
는 [email protected]
와 B
에 의존한다.소포 자물쇠.json 코드 세그먼트:
{
"dependencies": {
"A": {
"version": "1.0.0",
"resolved": "NPM REGISTRY URL of A",
"requires": {
"alpha": "1.0.0"
}
},
"alpha": {
"version": "1.0.0",
"resolved": "NPM REGISTRY URL of alpha v1",
},
"B": {
"version": "2.0.0",
"resolved": "NPM REGISTRY URL of B",
"requires": {
"alpha": "2.0.0",
"beta": "3.0.0"
},
"dependencies": {
"alpha": {
"version": "2.0.0",
"resolved": "NPM REGISTRY URL of alpha v2",
}
}
},
"beta": {
"version": "3.0.0",
"resolved": "NPM REGISTRY URL of beta v3",
}
}
}
추정: 가방의 정렬 의존 관계를 고려하지 않습니다.json에서 패키지는 패키지 자물쇠가 정의한 트리 구조에 설치됩니다.json.이로 인해 발생하는 의존 트리 구조는 다음과 같다.
노드 단위
|_A
|_α@v1.0
|_B
|| uu 노드 u 모듈
|| [email protected]
|[email protected]
4. 노드 모듈, 패키지 잠금.제이슨과 가방.json 모두 사용 가능:
node modules 폴더는 package lock에서 가져온 새 트리와 일치하도록 재배치됩니다.json, 그리고 자물쇠에 정의된 순서대로 설치합니다.json 파일.
[email protected]
(vs)[email protected]
:새로운 프로그램에서 기존 의존 트리나 노드 모듈이 없는 상황에서 의존항의 설치 순서는 다음과 같습니다.
예:
가령
Package.json
내부는 Package-lock.json
에 의존하고 A
는 [email protected]
에 의존한다.npm
정경
정경
명령하다
npm 설치
npm 설치 B
npm 설치 B
npm 설치
소포.json
{
종속성:
“A”:“1.0.0”,
“B”:“2.0.0”
}
}
{
종속성:
“A”:“1.0.0”,
“B”:“2.0.0”
}
}
소포 자물쇠.json
{
종속성:
“A”:{
버전: 1.0.0,
필요:
“alpha”:“1.0.0”,
}
},
알파:
버전: 1.0.0,
},
“B”:{
버전: 2.0.0,
필요:
“alpha”:“2.0.0”,
},
종속성:
알파:
버전: 2.0.0,
}
}
}
}
}
{
종속성:
“A”:{
버전: 1.0.0,
필요:
“alpha”:“1.0.0”,
},
종속성:
알파:
버전: 1.0.0,
}
}
},
알파:
버전: 2.0.0,
},
“B”:{
버전: 2.0.0,
필요:
“alpha”:“2.0.0”,
}
}
}
}
노드 단위
노드 단위
|_A
|_α@v1.0
|_B
|| uu 노드 u 모듈
|| [email protected]
노드 단위
|_A
|| uu 노드 u 모듈
|| [email protected]
|[email protected]
|_B
위의 비교는 가방 자물쇠의 중요성을 총결하는 데 도움이 된다.json.
패키지'alpha'가 JS 프로그램에서 가져온 경우
B
장면 1은 v1을 가리키고 장면 2는 v2를 가져옵니다.따라서 가져온 파일에 따라 코드 세그먼트의 동작이 다를 수 있습니다.
이것은 소포가 아니다.트리 구조를 확인하는 json (npm install은 패키지. json에 저장된 알파벳 순서에 따라 의존항을 다운로드하기 때문).
기억해라. 가장 좋은 방법은 소포 자물쇠를 추진하고 유지하는 것이다.이 프로젝트를 사용하는 모든 구성원이 같은 의존 관계 트리를 사용할 수 있도록 json을 원본 코드 (예:git) 로 변환합니다.
참조 자료:
Reference
이 문제에 관하여(npm 설치는 어떻게 내부에서 작업합니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/shree_j/how-npm-works-internally-4012텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)