>웹 프론트엔드 >JS 튜토리얼 >노드 패키지 관리 개발의 5단계에 대해 설명하는 기사

노드 패키지 관리 개발의 5단계에 대해 설명하는 기사

青灯夜游
青灯夜游앞으로
2022-12-26 19:46:432148검색

2009년 Node 탄생 이후 Node 생태계는 발전하고 번영해왔습니다. Node 생태계에서 파생된 Node 패키지 관리자들이 번성했고, npm, kpm, pnpm, Yarn, cnpm 등이 잇달아 등장했습니다. 실제로 Node 패키지 매니저의 개발은 크게 5단계로 나누어져 있는데 각 단계의 핵심 기능대표 제품을 살펴보겠습니다~

Phase One: Slash and Burn

정확하게 말하면, 패키지 관리자가 없으면 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

  • 모듈 관리에 직접 붙여넣으세요. 시간? 버전 번호 관리? 업그레이드에 의존하시나요? 그들 중 누구도 존재하지 않습니다!

  • 2단계: 중첩 설치

  • 2009년에 Node.js가 탄생했고 npm의 프로토타입도 2011년에 출시되었습니다. npm은 시맨틱 버전 제어 아이디어를 중심으로 설계되었습니다. 기본 Node 패키지 개발자가 고려하는 semver는 종속 패키지의 사용자 정의 버전 번호를 업그레이드할 때 semver 사양에 따라 버전 번호를 업그레이드합니다.

동의어:

노드 패키지 관리 표준화, node_modules 디렉터리 중첩 종속성 저장소

대표 제품:

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을 설치할 때마다 최신 버전의 종속성이 기본적으로 설치되므로 종속성이 설치됩니다

불확실함

문제:


semver는 버전 번호 구성을 X.Y.Z -[상태]로 표준화하고, 버전 번호 업그레이드 사양은 다음과 같습니다

X가 주요 버전 번호입니다. API의 변경 사항이 이전 버전, 메이저 버전 번호 업그레이드Y는 마이너 버전 번호: 새로운 API가 추가되었지만, 하위 호환성을 위해 업그레이드 마이너 버전 번호

Z는 패치 버전 번호: 하위 호환성 결함 복구가 완료된 경우

상태는 다음과 같습니다: 알파(내부 테스트), 베타(공개 테스트), 감마(상당히 성숙한 테스트) 버전), rc(사전 출시)

  • 버전이 확실하지 않은 이유
  • : npm 기본 설치 실행 시 npm은 개발자가 semver 버전 업그레이드 사양을 따르고 개발자를 위한 최신 버전의 종속성 패키지를 직접 설치할 것이라고 믿습니다
  • 해결 방법 1: 다음을 통해 버전 번호 앞에 ^를 사용하는 기본 동작을 끌 수 있습니다. npm config set save-exact true 명령
  • 요약: 기본적으로 최신 마이너 버전을 설치하는 종속성 라이브러리 자체 종속성 문제를 해결할 수 없습니다

해결 옵션 2: npm은

모든 라이브러리 및 모든 중첩된 종속 라이브러리의 정확한 버전을 기록하는 파일
  • 요약: 잠금 파일은 기본적으로 생성되지 않으며 사용자가 수동으로 지침을 실행해야 합니다. 사용자는 이 명령이 상대적으로 번거롭다는 것을 알고 있습니다.
    3단계: 평면 설치
  • npm-shrinkwrap.json2015년, 중첩된 설치 문제와 npm1 및 npm2의 일관성 없는 버전 문제를 해결하기 위해 npm 프로그램이 완전히 다시 작성되었습니다.

  • 대명사:

    덜 중복된 종속성을 사용한 설치, 평면화 의존성을 저장할 node_modules 디렉터리

대표제품 :

npm v3 버전

원칙에 대한 간략한 설명: 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을 실행할 때 "고스트 종속성"이 주관적으로 설치되지 않아 프로젝트가 실행되지 않게 됩니다. 종속 패키지로 이동하여 오류를 보고하세요.

4단계: 보안 및 속도 향상

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가 선두를 차지하고, 종속성을 다운로드할 때 종속성 잠금 파일이 그 뒤를 따릅니다. 기본적으로

  • yarn의 .lock 파일 값으로 정확하게 생성됩니다. 설치된 종속성 버전만 기록하며 node_modules 디렉터리 구조를 결정하려면 package.json이 필요합니다. : 설치된 종속성 버전 및 node_modules 디렉터리 구조를 기록합니다.
요약:

버전 불일치 문제가 있지만 "종속성 고스트" 문제는 여전히 존재합니다. 설명 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整理依赖目录
  • 由于 node_modules 是扁平化管理依赖,深层依赖可能会被安装到一级目录下;当项目中再安装不同版本的依赖时,遇到依赖版本冲突,会自动将深层依赖从一级目录移动到父依赖目录下 【已验证】

阶段五:更安全、高速、低耗

对着 pnpm 的成熟,开发者们享受着 pnpm 带来的 更安全、更高速、存储更低耗 等红利,解决了“幽灵依赖” 问题,解决了重复依赖问题

代名词: 安全(依赖安装所见即所得)、高速(不重复安装)、存储低耗(硬链接 + 软链接)

代表产物: pnpm

关键特点:

(1)速度极快:存储中心集中管理依赖,直接硬链接到项目的 node_modules/.pnpm

node_modules는 평면 관리 종속성이므로 프로젝트에 다양한 버전의 종속성을 설치할 때 깊은 종속성이 첫 번째 수준 디렉터리에 설치될 수 있습니다. 버전 충돌이 발생하면 깊은 종속성이 자동으로 첫 번째 수준 디렉터리에서 첫 번째 수준 디렉터리로 이동됩니다. 디렉터리는 상위 종속성 디렉터리

【Verified】

  • 대명사:
  • 보안(종속성 설치 WYSIWYG), 고속(반복 설치 없음), 낮은 저장 공간 소비(하드 링크 + 소프트 링크)
  • 대표 제품:

    pnpm

    주요 기능:

    (1) 매우 빠름

    : 스토리지 센터는 종속성을 중앙에서 관리하고 프로젝트의 node_modules/.pnpm에 직접 하드 링크합니다. 이전 작업 방법과 비교하여 전역 node_modules 복사에서 프로젝트 내로의 IO 작업 수가 많이 감소합니다

    (2) 매우 높은 디스크 사용률:

    🎜프로젝트 전체에서 동일한 버전의 종속성 공유: 하드 링크, 소프트 링크 🎜🎜동일한 종속성의 다른 버전 재사용 최대화: 다른 버전을 저장하려면 Diff 파일만 추가하세요🎜🎜🎜 (3) 높은 보안: node_modules 디렉터리 구조는 package.json 종속성 목록으로, "유령 종속성" 문제를 해결합니다. 🎜🎜 🎜🎜🎜🎜성능은 다음과 같습니다. 🎜🎜🎜🎜🎜🎜더 많은 노드 관련 지식을 보려면 🎜nodejs 튜토리얼🎜을 방문하세요! 🎜

    위 내용은 노드 패키지 관리 개발의 5단계에 대해 설명하는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제