의존성 지옥에서 우리를 구하십시오
대부분의 최신 서비스와 응용 프로그램은 계속 성장하는node-modules
폴더에 살고있는 많은 의존성을 가지고 있습니다. 일반적으로 이러한 라이브러리의 많은 적극적으로 유지 관리,변경 및 업데이트되고있다. 종속성이 제대로 관리되지 않으면 종속성 지옥에서 빠르게 자신을 찾을 수 있습니다.
식료품 쇼핑
노드 응용 프로그램을 시작할 때 첫 번째 단계 중 하나가npm install
을 실행하는 것입니다. 이 작업을 실행하면 노드는 프로젝트 기반에서package.json
이라는 파일을 확인합니다. 해당 파일이 발견되면dependency
섹션을 일종의”식료품 쇼핑 목록”으로 사용하여 응용 프로그램에 필요한”재료”(코드 비트)를 수집합니다. 이 경우”식료품 점”은”1219″라고 부릅니다. 여기서 필요한 모든 것이 대부분(전용 레지스트리는 독점 코드 및 기타 등등을 위해 만들 수 있음)입니다. 패키지가 레지스트리에서 발견되면 노드는 해당”성분”을 프로젝트 기반의node_modules
디렉토리에 넣습니다.
필요한 패키지에는 자체”쇼핑 목록”(패키지.앱이 자체 패키지의 다음 종속성으로 이동하기 전에 이러한 중첩 된 종속성을 모두 해결해야합니다.제이슨
⬆️ 버전,3157>
종속성 버전은 일반적으로v1.3.5
과 같습니다. 이를 시맨틱 버전 관리 또는 셈버라고합니다. 셈버와 함께,숫자는 다양한 심각도-MAJOR.MINOR.PATCH
의 코드 변경 사항을 나타냅니다.
그들의 문서에서-
이전 버전과 호환되는 방식으로 기능을 추가할 때
부 버전,이전 버전과 호환되는 버그 수정을 할 때
패치 버전.
이를 염두에두고 많은 사람들이 종속성이 새로운 변경 사항에서 가질 수있는 새로운 새로운 항목으로 앱을 자동으로 업데이트하려고합니다.
물결표
~
접두사를 사용하면 새로운PATCH
업데이트가 제공되지만 주 또는 부 업데이트는 제공되지 않습니다. 따라서~1.3.1
은1.3.9
을 설치할 수 있지만1.4.0
캐럿
^
접두사를 사용하면 새로운PATCH
및MINOR
버전이 있지만 메이저는 아닙니다. 따라서^1.3.1
는1.4.9
을 설치할 수 있지만1.5.0
예제 코드의 종속성 트리를 살펴보겠습니다:
my-breakfast | | milk | |coffee-script
좋아,더 막대기처럼,하지만 잘하면 종속성 체인이 분명합니다. 우리의 패키지.그러나 우유는0.9.6
–1.0.0
의 어느 곳에서나coffee-script
이 필요합니다. npm install
실행,우리는 우리의 응용 프로그램을 개발,모든 늠름한 도리입니다.
이제 2 개월을 빨리 감아 보겠습니다. 누군가가 당신의 프로젝트를 찾아 기여하고 싶어합니다. 그들은 당신의 저장소를 포크로 복제하고,npm install
을 실행합니다. “하지만 내 기계에 근무!”당신은 울고. 공동 작업자가 노드 모듈을 설치했을 때milk
의 특정 버전이 보장되었지만milk
의 패키지로 인해coffee-script
의 다른 버전이 있습니다.나는 그것을 사용했다.
돌에서 종속성 설정
이에 대한 한 가지 해결책은package-lock.json
파일을 사용하는 것입니다. 이 파일을 사용하면 설치하는 모든 종속성 버전을 매우 세부적으로 제어 할 수 있습니다. package.json
이 쇼핑 목록과 같으면package-lock.json
는 예산과 같습니다. 당신은 시리얼을 먹을 수 있지만 캡 앤 크런치 대신 매장 브랜드가 될 것입니다. 이 특이성은 종속성 트리의 모든 분기 아래로 실행됩니다. 잠금 파일을 사용하려면package.json
이 있어야합니다(package.json
은 종속성 관리보다 훨씬 더 많은 작업을 수행합니다.이 게시물의 초점 일뿐입니다).
마무리
개인적으로package-lock.json
파일이 항상 사용되어야한다고 생각합니다. 그것은 단지 환경과 배포에 걸쳐 모든 것을 더 신뢰할 수 있습니다. 여기에 의존 할 때 잘하면 도울 수있는 마지막 작은 덩어리가 있습니다:
-
npm install --save
자동으로 잠금 파일 및 패키지를 업데이트합니다.그 패키지와 함께 제이슨. npm ci
npm install
대신 노드 모듈을 자동으로 다시 작성하고 잠금 파일에서 빌드합니다. 그리고 일반적으로 잠금 파일과 함께 사용하는 것이 가장 좋습니다.- 더 큰 프로젝트와 매우 강력한 의존성의 경우 도커와 컨테이너를 확인하십시오. 그것은 당신의 코드와 종속성을 완벽하게 포함하는 가상 머신처럼 거의 기능 할 수 있으며,다른 환경으로 승격되도록 복제됩니다. 그래서 잘하면 당신은 훨씬 덜”그것은 내 컴퓨터에서 작동”종류의 문제로 끝납니다.