나는 Bundler를 좋아하며 의존성 관리에 탁월합니다. 나는 npm을 좋아 합니다. 노드 패키지를 설치하는 것은 쉽습니다! 저는 nodejs 앱을 가지고 있으며 앱 종속성을 지정하고 앱을 배포 할 때마다 쉽게 설치 / 업데이트 할 수 있기를 바랍니다 . 이것은 내가 공개하는 라이브러리가 아니라 본격적인 웹 앱입니다.
나는 npm bundle
명령을 알고 있지만 패키지가 설치된 디렉토리를 단순히 무시하는 것 같습니다.
나는 이러한 방식으로 번 들러를 사용하는 데 익숙합니다.
# Gemfile
gem "rails", "3.0.3"
Rails v3.0.3 및 기타 필수 gem이 아직없는 경우에만 호스트 컴퓨터에 설치합니다.
> bundle install
npm으로 비슷한 것을 어떻게 얻을 수 있습니까?
답변
npm 1.0 (README 파일의 단계를 따르면 기본적으로 제공됨)에서 “번들”은 더 이상 분리 된 것이 아닙니다. 단지 “작동 방식”입니다.
그래서:
package.json
프로젝트의 루트에 파일을 넣으십시오.-
해당 파일에 귀하의 부서를 나열하십시오.
{ "name" : "my-project" , "version" : "1.0.0" , "dependencies" : { "express" : "1.0.0" } }
-
npm install
전역 모드가 아닌 인수없이 이것을 호출하기 때문에 모든 deps를 로컬로 설치합니다. require("express")
행복하세요.
답변
편집 : 이것은 npm 버전 <1.0에만 적용됩니다.
이것을 알아내는 것은 매우 어려웠지만 NPM은 이것을 가능하게합니다 .
세 가지 구성 요소가 필요합니다
- 저장소의 하위 디렉토리 (예 :
deps/
) - ㅏ
package.json
종속성을 나열하는 위 디렉토리 파일 index.js
종속성이 필요한 위 디렉토리 의 파일
예
표현 이 유일한 의존 이라고 상상해보십시오.
deps / package.json
참고 : 종속성을 수정할 때마다 버전 번호를 늘립니다.
{
"name": "myapp_dependencies",
"version": "0.0.1",
"engines": {
"node": "0.4.1"
},
"dependencies":{
"express": "2.0.0beta2"
}
}
deps / index.js
export.modules = {
express: require('express')
//add more
}
이제 npm을 사용하여 종속성을 설치할 수 있습니다. 이 부분을 배포 프로세스의 일부로 만들 수도 있습니다.
cd deps
npm install
그런 다음 앱 코드 내에서 다음과 같이 특정 버전의 Express에 액세스 할 수 있습니다.
var express = require('myapp_dependencies').express;
답변
Isaacs (author npm) 블로그에서이 두 기사를 읽어야합니다. 나는 그들이 정말 훌륭하다고 생각하며 목표를 달성하는 방법을 알려줍니다.
- http://blog.izs.me/post/1675072029/10-cool-things-you-probably-didnt-realize-npm-could-do
- http://foohack.com/2010/08/intro-to-npm/
나는 링크 # 1 (포인트 # 11)이 이것을 설명한다고 믿는다.
11 : 모든 종속성을 패키지 자체에 번들링
npm bundle 명령을 사용할 때 npm은 모든 종속성을 패키지의 node_modules 폴더에 저장합니다. 하지만 여기서 멈추지 않습니다.
레지스트리에없는 것에 의존하고 싶다면 그렇게 할 수 있습니다. 다음과 같이하십시오.
npm bundle install http://github.com/whoever/whatever/tarball/master
그러면 해당 tarball의 내용이 번들에 설치
되고 종속성으로 나열 할 수 있으며 다음과 같은 경우에는 설치를 시도하지 않습니다. 패키지가 설치됩니다.이것은 또한 자신의 포크가 있고 이름을 변경하지 않으려는 경우에도 유용합니다.
실제로 번들에서 거의 모든 npm 명령을 실행할 수 있습니다. 내부 내용을 보려면 npm bundle ls를 수행하면됩니다. 무언가를 제거하려면 npm bundle rm 일을 수행하십시오. 물론 여러 버전을 설치하고 원하는 버전을 활성화 할 수 있습니다.
답변
Npm 버전 1.1.2부터 .NET 과 유사한 파일 npm shrinkwrap
을 생성하는 새로운 명령 이 있습니다. 소프트웨어 부패를 방지하기 위해 하나를 만드는 것이 중요합니다 ( Bundler의 이론적 근거 참조).npm-shrinkwrapped.json
Gemfile.lock
). 특히 Nodejs는 빠르게 움직이는 커뮤니티를 가지고 있습니다.
자동으로 bundle install
생성하는 동안 생성 하지 않습니다 (존재할 때 사용합니다). 따라서 사용하는 것을 기억해야합니다.Gemfile.lock
npm install
npm-shrinkwrapped.json
npm shrinkwrap
.
http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/ 에서 전체 가이드 읽기
답변
가장 간단한 해결책은 플래그 (지난 달에 npm에 추가됨)가으로 설정된 package.json
파일 을 사용하는 것 같습니다 . 그런 식으로 실행 하거나private
true
npm install
npm bundle
프로젝트의 종속성을 있지만 다른 사람이 실수로 비공개 프로젝트를 게시하는 것을 방지 할 수 있습니다.
예를 들면 다음과 같습니다 package.json
.
{
"name": "yourProject"
,"version": "1.0.0"
,"dependencies": { "express" : ">=2.1.0" }
,"private": true
}
실행 npm install
은 express
아직 존재하지 않는 경우 로컬 시스템에 설치 됩니다. 실행 npm publish
하면 오류가 발생합니다."private": true
.
사용자와 팀은 내부적으로 버전 태그를 사용하여 시간 경과에 따른 종속성 변경을 추적 할 수 있습니다. 종속성을 변경할 때마다 버전을 올릴 수 있습니다. 설치 한 버전을 확인하려면 npm ls installed
.
답변
앱 게시 npm
하고 package.json 파일에 종속성을 나열합니다.
누군가가 npm
패키지를 설치 하는 데 사용하면npm
종속성을 해결합니다.