[node.js] npm의 일반 종속성에 대한 bundledDependencies의 장점

npm을 사용하면을 지정할 수 bundledDependencies있지만 이렇게하면 어떤 이점이 있습니까? 참조하는 모듈이 삭제 된 경우에도 올바른 버전을 확보하고 싶은지, 아니면 번들링으로 인한 속도 이점이 있는지 확인하고 싶습니까?

누구나 bundledDependencies정상적인 종속성에 비해 장점을 알고 있습니까?



답변

현재 Node의 가장 큰 문제 중 하나는 Node가 얼마나 빠르게 변화하고 있는지입니다. 즉, 프로덕션 시스템은 매우 취약 npm update할 수 있으며 쉽게 문제를 일으킬 수 있습니다.

bundledDependencies를 사용하면 다른 사항이 변경 되더라도 항상 올바른 종속성을 제공 할 것이라고 올바르게 추측하여이 문제를 해결할 수 있습니다.

이를 사용하여 자신의 개인 번들을 번들로 묶어 설치와 함께 제공 할 수도 있습니다.


답변

빠른 독자를 위해 :이 QA는 package.json bundledDependencies 필드에관한것이지 패키지 에 관한 것이 아닙니다 .

bundledDependencies의 기능

“bundledDependencies”는 정확히 이름이 의미하는 바입니다. 프로젝트 내부에 있어야하는 종속성. 따라서 기능은 기본적으로 일반 종속성과 동일합니다. 또한 실행할 때 포장됩니다 npm pack.

사용시기

일반 종속성은 일반적으로 npm 레지스트리에서 설치됩니다. 따라서 번들 된 종속성은 다음과 같은 경우에 유용합니다.

  • npm 레지스트리에서 가져 오지 않았거나 수정 된 타사 라이브러리를 재사용하려는 경우
  • 자신의 프로젝트를 모듈로 재사용하고 싶습니다.
  • 모듈과 함께 일부 파일을 배포하고 싶습니다.

이렇게하면 고유 한 npm 저장소를 만들고 유지 관리 할 필요가 없지만 npm 패키지에서 얻는 것과 동일한 이점을 얻을 수 있습니다.

하면 되지 번들 종속성을 사용하는

개발할 때 우연한 업데이트를 방지하는 것이 핵심이라고 생각하지 않습니다. 이를위한 더 나은 도구, 즉 코드 저장소 (git, mercurial, svn …) 또는 잠금 파일이 있습니다.

패키지 버전을 고정하려면 다음을 사용할 수 있습니다.

  • 옵션 1 : 노드 8과 함께 제공되는 최신 NPM 버전 5를 사용합니다. package-lock.json파일을 사용 합니다 ( 노드 블로그 및 노드 8 릴리스 참조).

  • Option2 : 대신 원사 를 사용하십시오 npm. 그것은 페이스 북의 패키지 관리자 npm이며 yarn.lock파일을 사용하는 것보다 빠릅니다 . package.json그렇지 않으면 동일하게 사용 됩니다.

이는 Bundler 또는 Cargo와 같은 다른 패키지 관리자의 잠금 파일과 비슷합니다. npm의 npm-shrinkwrap.json과 유사하지만 손실이없고 재현 가능한 결과를 생성합니다.

npm실제로에서 해당 기능을 복사했습니다 yarn.

  • Option3 : 이것은 이전에 권장 된 접근 방식이며 더 이상 권장하지 않습니다. 아이디어는 npm shrinkwrap대부분의 시간 을 사용 하고 때로는 node_module 폴더를 포함한 모든 것을 코드 저장소에 넣는 것입니다. 또는 shrinkpack을 사용할 수도 있습니다 . 당시 모범 사례는 node.js 블로그즐거운 개발자 웹 사이트 에서 논의되었습니다 .

또한보십시오

이것은 질문의 범위를 약간 벗어 났지만 마지막 종류의 종속성 (내가 알고있는) 인 피어 종속성 을 언급하고 싶습니다 . 이 관련 SO 질문 과 아마도 bundledDependenciesyarn 에 대한 문서를 참조하십시오 .


답변

다른 장점은 내부 종속성 (애플리케이션 구성 요소)을 여기에 배치 한 다음 lib /를 복잡하게 만들고 npm에 게시하는 대신 독립적 인 모듈 인 것처럼 앱에 요구할 수 있다는 것입니다.

그들이 별도의 모듈로 살 수있을 정도로 성숙되면 코드를 수정하지 않고 쉽게 npm에 넣을 수 있습니다.


답변

나는 이미 여기에서 이것을 보지 못했다는 것에 놀랐지 만 신중하게 선택하면 구성되지 않은 시스템에서 실행 bundledDependencies되는 배포 가능한 패키지를 생성하는 데 사용할 수 있습니다 . 다음, 엄지 드라이브 (또는 무엇이든)에 위에 패키지를 가져오고 타르 압축을 풉니 다 : 당신이하지 인터넷 / 네트워크로 아니에요 시스템을 예 경우에 유용 또는 그것을 그냥 작품.npm packnpmnpm runnode index.js

“오프라인”으로 실행되도록 응용 프로그램을 번들로 묶는 더 좋은 방법이있을 수 있지만,있는 경우 찾지 못했습니다.


답변

운영상 bundledDependencies를 모듈의 개인 모듈 저장소로 간주합니다. 여기서 종속성이 더 공개되고 모듈과 해당 종속성 (및 하위 종속성)간에 해결됩니다. 모듈은 예를 들어 반응의 이전 버전에 의존 할 수 있지만 종속성에는 최신 버전이 필요합니다. 패키지 / 설치는에서 고정 된 버전이되고 node_modules/$yourmodule/node_modules/react종속성은 해당 버전을 가져 오게됩니다 node_modules/react(또는 원하는 node_modules/$dependency/node_modules/react경우).

주의 사항 : 최근에 react에 대한 종속성을 제대로 구성하지 않은 종속성이 발생했으며 bundledDependencies에서 반응하면 해당 종속 모듈이 런타임에 실패했습니다.


답변