의존성 지옥에서 우리를 구하십시오

의존성 지옥에서 우리를 구하십시오

대부분의 최신 서비스와 응용 프로그램은 계속 성장하는node-modules폴더에 살고있는 많은 의존성을 가지고 있습니다. 일반적으로 이러한 라이브러리의 많은 적극적으로 유지 관리,변경 및 업데이트되고있다. 종속성이 제대로 관리되지 않으면 종속성 지옥에서 빠르게 자신을 찾을 수 있습니다.

식료품 쇼핑

노드 응용 프로그램을 시작할 때 첫 번째 단계 중 하나가npm install을 실행하는 것입니다. 이 작업을 실행하면 노드는 프로젝트 기반에서package.json이라는 파일을 확인합니다. 해당 파일이 발견되면dependency섹션을 일종의”식료품 쇼핑 목록”으로 사용하여 응용 프로그램에 필요한”재료”(코드 비트)를 수집합니다. 이 경우”식료품 점”은”1219″라고 부릅니다. 여기서 필요한 모든 것이 대부분(전용 레지스트리는 독점 코드 및 기타 등등을 위해 만들 수 있음)입니다. 패키지가 레지스트리에서 발견되면 노드는 해당”성분”을 프로젝트 기반의node_modules디렉토리에 넣습니다.

필요한 패키지에는 자체”쇼핑 목록”(패키지.앱이 자체 패키지의 다음 종속성으로 이동하기 전에 이러한 중첩 된 종속성을 모두 해결해야합니다.제이슨

대체 텍스트

⬆️ 버전,3157>

종속성 버전은 일반적으로v1.3.5과 같습니다. 이를 시맨틱 버전 관리 또는 셈버라고합니다. 셈버와 함께,숫자는 다양한 심각도-MAJOR.MINOR.PATCH의 코드 변경 사항을 나타냅니다.
그들의 문서에서-

이전 버전과 호환되는 방식으로 기능을 추가할 때
부 버전,이전 버전과 호환되는 버그 수정을 할 때
패치 버전.

이를 염두에두고 많은 사람들이 종속성이 새로운 변경 사항에서 가질 수있는 새로운 새로운 항목으로 앱을 자동으로 업데이트하려고합니다.

물결표~접두사를 사용하면 새로운PATCH업데이트가 제공되지만 주 또는 부 업데이트는 제공되지 않습니다. 따라서~1.3.11.3.9을 설치할 수 있지만1.4.0

캐럿^접두사를 사용하면 새로운PATCHMINOR버전이 있지만 메이저는 아닙니다. 따라서^1.3.11.4.9을 설치할 수 있지만1.5.0
대체 텍스트
대체 텍스트는 설치할 수 없습니다

예제 코드의 종속성 트리를 살펴보겠습니다:

my-breakfast | | milk | |coffee-script 

좋아,더 막대기처럼,하지만 잘하면 종속성 체인이 분명합니다. 우리의 패키지.그러나 우유는0.9.61.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 cinpm install대신 노드 모듈을 자동으로 다시 작성하고 잠금 파일에서 빌드합니다. 그리고 일반적으로 잠금 파일과 함께 사용하는 것이 가장 좋습니다.
  • 더 큰 프로젝트와 매우 강력한 의존성의 경우 도커와 컨테이너를 확인하십시오. 그것은 당신의 코드와 종속성을 완벽하게 포함하는 가상 머신처럼 거의 기능 할 수 있으며,다른 환경으로 승격되도록 복제됩니다. 그래서 잘하면 당신은 훨씬 덜”그것은 내 컴퓨터에서 작동”종류의 문제로 끝납니다.

답글 남기기

이메일 주소는 공개되지 않습니다.