2009년 Node 탄생 이후 Node 생태계는 발전하고 번영해왔습니다. Node 생태계에서 파생된 Node 패키지 관리자들이 번성했고, npm, kpm, pnpm, Yarn, cnpm 등이 잇달아 등장했습니다. 실제로 Node 패키지 매니저의 개발은 크게 5단계로 나누어져 있는데 각 단계의 핵심 기능과 대표 제품을 살펴보겠습니다~
정확하게 말하면, 패키지 관리자가 없으면 Node는 존재하지 않습니다. 2009년 Node.js가 나왔을 때 npm의 프로토타입도 출시되었습니다. [관련 튜토리얼 추천: nodejs 비디오 튜토리얼, 프로그래밍 교육]
npm은 Node.js 패키지 관리자의 전체 이름입니다. Node.js의 간략한 역사에서 볼 수 있습니다.
2009 Node.js is born The first form of npm is created
나타나지 않는 노드 패키지 그 당시 제가 더 많이 했던 일은 jQuery 등 온라인에서 각 소프트웨어의 공식 홈페이지를 찾아보는 것이었습니다. package;
압축을 풀고 프로젝트의 libs라는 디렉터리에 넣습니다.
더 편리하게 만들고 싶다면 CDN 링크를 HTML
모듈 관리에 직접 붙여넣으세요. 시간? 버전 번호 관리? 업그레이드에 의존하시나요? 그들 중 누구도 존재하지 않습니다!
npm v1, v2 버전
주요 기능:
(1) 종속 패키지 중첩 설치, 동일한 버전 종속성은 중복 설치됩니다 (2) 종속성 패키지 설치 불확실성: 최신 버전의 종속성 패키지가 기본적으로 설치됩니다(고정 버전 설정 가능)
(3) 종속성 직렬 설치는 오프라인 캐싱이 지원되지 않습니다.
설명 1: 종속성중첩 설치
, A가 B에 의존하고 B가 C에 의존하는 경우 node_modules 디렉터리는 다음과 같습니다
node_modules - package-A -- node_modules --- package-B ----- node_modules ------ package-C -------- some-really-really-really-long-file-name-in-package-c.js
문제: 종속성을 너무 많이 중첩하면 중첩 지옥이 발생하고, 동시에 동일한 종속 패키지의 중복 설치로 인해 node_modules가 너무 커지므로 프로그래머는 정기적으로 rm -rf node_modules를 사용해야 합니다. 그러나 Windows 시스템에서는 많은 프로그램이 260을 초과하는 파일 경로 이름을 처리할 수 없습니다. 이는 npm의 초기 Windows 사용자에게 나타났습니다. 이 팝업 창
설명 2: npm을 설치할 때마다 최신 버전의 종속성이 기본적으로 설치되므로 종속성이 설치됩니다불확실함
문제:X가 주요 버전 번호입니다. API의 변경 사항이 이전 버전, 메이저 버전 번호 업그레이드Y는 마이너 버전 번호: 새로운 API가 추가되었지만, 하위 호환성을 위해 업그레이드 마이너 버전 번호
Z는 패치 버전 번호: 하위 호환성 결함 복구가 완료된 경우상태는 다음과 같습니다: 알파(내부 테스트), 베타(공개 테스트), 감마(상당히 성숙한 테스트) 버전), rc(사전 출시)
해결 옵션 2: npm은
모든 라이브러리 및 모든 중첩된 종속 라이브러리의 정확한 버전을 기록하는 파일npm-shrinkwrap.json
2015년, 중첩된 설치 문제와 npm1 및 npm2의 일관성 없는 버전 문제를 해결하기 위해 npm 프로그램이 완전히 다시 작성되었습니다.
덜 중복된 종속성을 사용한 설치, 평면화 의존성을 저장할 node_modules 디렉터리
원칙에 대한 간략한 설명: npm을 설치할 때 먼저 종속성 트리를 구축한 다음 node_modules의 루트 디렉터리에 모든 종속성을 설치합니다. 하위 종속성이 동일한 이름을 가진 다른 버전의 종속성을 만나면 하위 종속성은 다음과 같습니다. 자체 node_modules 아래에 설치
주요 기능:
(1) 중복 설치 감소: 특정 상황에서 중복 패키지 설치를 줄이는 플랫 설치에 의존
기존 문제:
(1) "Ghost dependency", "Phantom dependency" " 문제
(2) "Twin strangers" 및 "dependent package clones" 문제
(3) 디렉터리가 고정되어 있지 않습니다. 종속 항목의 설치 순서에 따라 node_module 디렉터리 구조가 결정됩니다.
설명 1: 종속성 설치 순서, node_modules 디렉터리 구조가 결정됩니다
다음 시나리오:App1은 packageA와 packageC, packageG와 packageH에 종속되고 packageA와 packageC는 모두 packageB v1.0, packageG 및 packageH에 종속됩니다. 둘 다 packageB v2.0 버전에 따라 다릅니다
packageA 또는 packageC를 먼저 설치하는 경우 node_modules 디렉터리는 다음과 같습니다
packageG 또는 packageH를 먼저 설치하면 node_modules 디렉터리는 다음과 같습니다
위의 상황에서 npm은 지침을 제공합니다npm dedupe
, node_modules의 디렉터리 구조를 수동으로 구성하고 단순화할 수 있습니다. 정렬 후 node_modules 디렉터리 구조는 일관되며 종속 패키지의 설치 순서에 영향을 받지 않습니다
설명 2: 반드시 그렇지 않을 수도 있습니다. 중복 패키지 설치 줄이기
예제 1을 보면 종속 패키지가 평면적으로 설치되어 있음에도 불구하고 동일한 버전의 종속 패키지에 중복 패키지가 있음을 알 수 있습니다.
설명 3: "쌍둥이 낯선 사람" 문제
예제 1을 참조하면 동일한 버전의 종속성 패키지가 두 번 설치되어 두 곳에 배치됩니다. 이 현상은 "Twin Strangers"로 알려져 있습니다.
설명 4: "Ghost 종속성" 문제
node_modules 첫 번째 종속성 패키지- level 디렉터리는 개발자가 직접 사용할 수 있지만 종속성 패키지는 package.json에 정의되어 있지 않습니다. 종속성 패키지를 "고스트 종속성"이라고 합니다. 프런트엔드 프로젝트에서 "고스트 종속성"을 사용하면 나중에 문제가 발생할 수 있습니다.
이 "고스트 종속성"은 나중에 다른 종속성 업그레이드로 인해 제거될 수 있으므로 더 이상 node_modules에 존재하지 않게 됩니다. npm install을 실행할 때 "고스트 종속성"이 주관적으로 설치되지 않아 프로젝트가 실행되지 않게 됩니다. 종속 패키지로 이동하여 오류를 보고하세요.
2016년에는 Yarn 및 pnpm 릴리스 버전이 차례로 등장했으며, 이는 성능에 비해 불확실성과 느린 설치 속도 등 이전 설치 버전의 문제를 어느 정도 해결했습니다. 그 원사가 가장 먼저 출시됐는데, npm이 더 눈길을 끌고, 일관성과 보안이 보장되고, 설치 속도가 향상됩니다
동의어: 종속 설치가 상대적으로 안전하고 속도가 빠릅니다
대표 제품: 원사 출시 버전, pnpm 릴리스 버전, npm v5 버전(npm v4는 많이 변경되지 않았지만 v5는 큰 발전을 이루었습니다)
주요 기능:
(1) 보안: 버전 잠금 파일이 기본적으로 생성되어 종속성 버전이 설치할 때마다 동일
(2) 속도 향상: 캐시 오프라인 설치 추가, 병렬 설치, 설치 예외 후 자동 재시도 추가
(3) 작업 공간: v1 버전부터 Yarn을 지원하므로 효율적으로 관리할 수 있습니다. 여러 프로젝트의 종속성 패키지, npm v7은 작업 공간 존재만 지원합니다
문제 :
(1) Ghost 종속성
(2) 종속성 패키지가 단일 프로젝트 및 여러 프로젝트에 반복적으로 설치됩니다.
(3) 디렉토리 고정되지 않음: 종속성 설치 순서에 따라 node_module 디렉터리 구조가 결정됩니다.
설명 1: 보안 정보
yarn v0.x가 선두를 차지하고, 종속성을 다운로드할 때 종속성 잠금 파일이 그 뒤를 따릅니다. 기본적으로
버전 불일치 문제가 있지만 "종속성 고스트" 문제는 여전히 존재합니다. 설명 2: 속도 개선 정보 - 오프라인 캐싱
npm v2 버전은 캐싱을 지원하지만 캐시된 종속성을 사용하려면 온라인 감지가 필요합니다.yarn v0.x 이 버전은 인터넷에서 다운로드한 패키지가 전역적으로 캐시됩니다. , 먼저 로컬에서 검색하여 사본을 찾으면 직접 복사할 수 있습니다. npm v5 버전은 캐시 시스템을 다시 작성했으며 설치 속도도 크게 향상되었습니다.
설명 3: 속도 향상에 관해 - 병렬 설치
yarn은 종속성 패키지의 병렬 설치를 최초로 지원했습니다. 이전에는 npm이 종속성을 직렬로 설치했습니다. 나중에 npm도 병렬 설치를 최적화했습니다.설명 4: 종속성 설치 후 node_modules 디렉터리가 자동으로 구성됩니다.
시작 시간: Yarn v1.x 버전, npm v4.x 버전.lock
파일을 삭제하면 npm v4.x 이전 버전의 경우 종속성이 초기화되고 설치될 때 node_modules 디렉터리가 자동으로 구성됩니다. npm dedupe
명령으로 종속성 디렉터리 구성.lock
文件,初始化安装依赖时,会自动整理 node_modules 目录;npm v4.x之前版本,需要用户手动执行指令 npm dedupe
整理依赖目录对着 pnpm 的成熟,开发者们享受着 pnpm 带来的 更安全、更高速、存储更低耗 等红利,解决了“幽灵依赖” 问题,解决了重复依赖问题
代名词: 安全(依赖安装所见即所得)、高速(不重复安装)、存储低耗(硬链接 + 软链接)
代表产物: pnpm
关键特点:
(1)速度极快:存储中心集中管理依赖,直接硬链接到项目的 node_modules/.pnpm
【Verified】
대표 제품:
pnpm 주요 기능:(1) 매우 빠름
: 스토리지 센터는 종속성을 중앙에서 관리하고 프로젝트의 node_modules/.pnpm
에 직접 하드 링크합니다. 이전 작업 방법과 비교하여 전역 node_modules 복사에서 프로젝트 내로의 IO 작업 수가 많이 감소합니다
(2) 매우 높은 디스크 사용률:
🎜프로젝트 전체에서 동일한 버전의 종속성 공유: 하드 링크, 소프트 링크 🎜🎜동일한 종속성의 다른 버전 재사용 최대화: 다른 버전을 저장하려면 Diff 파일만 추가하세요🎜🎜🎜 (3) 높은 보안: node_modules 디렉터리 구조는 package.json 종속성 목록으로, "유령 종속성" 문제를 해결합니다. 🎜🎜 🎜🎜🎜🎜성능은 다음과 같습니다. 🎜🎜🎜🎜🎜🎜더 많은 노드 관련 지식을 보려면 🎜nodejs 튜토리얼🎜을 방문하세요! 🎜위 내용은 노드 패키지 관리 개발의 5단계에 대해 설명하는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!