[javascript] npm을 사용하여 rubygems 용 번 들러처럼 필수 패키지를 설치하거나 업데이트합니다.

나는 Bundler를 좋아하며 의존성 관리에 탁월합니다. 나는 npm을 좋아 합니다. 노드 패키지를 설치하는 것은 쉽습니다! 저는 nodejs 앱을 가지고 있으며 앱 종속성을 지정하고 앱을 배포 때마다 쉽게 설치 / 업데이트 할 수 있기를 바랍니다 . 이것은 내가 공개하는 라이브러리가 아니라 본격적인 웹 앱입니다.

나는 npm bundle명령을 알고 있지만 패키지가 설치된 디렉토리를 단순히 무시하는 것 같습니다.

나는 이러한 방식으로 번 들러를 사용하는 데 익숙합니다.

# Gemfile
gem "rails", "3.0.3"

Rails v3.0.3 및 기타 필수 gem이 아직없는 경우에만 호스트 컴퓨터에 설치합니다.

> bundle install

npm으로 비슷한 것을 어떻게 얻을 수 있습니까?



답변

npm 1.0 (README 파일의 단계를 따르면 기본적으로 제공됨)에서 “번들”은 더 이상 분리 된 것이 아닙니다. 단지 “작동 방식”입니다.

그래서:

  1. package.json프로젝트의 루트에 파일을 넣으십시오.
  2. 해당 파일에 귀하의 부서를 나열하십시오.

    { "name" : "my-project"
    , "version" : "1.0.0"
    , "dependencies" : { "express" : "1.0.0" } }
    
  3. npm install 전역 모드가 아닌 인수없이 이것을 호출하기 때문에 모든 deps를 로컬로 설치합니다.

  4. require("express") 행복하세요.


답변

편집 : 이것은 npm 버전 <1.0에만 적용됩니다.


이것을 알아내는 것은 매우 어려웠지만 NPM은 이것을 가능하게합니다 .

세 가지 구성 요소가 필요합니다

  1. 저장소의 하위 디렉토리 (예 : deps/ )
  2. package.json종속성을 나열하는 위 디렉토리 파일
  3. 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) 블로그에서이 두 기사를 읽어야합니다. 나는 그들이 정말 훌륭하다고 생각하며 목표를 달성하는 방법을 알려줍니다.

  1. http://blog.izs.me/post/1675072029/10-cool-things-you-probably-didnt-realize-npm-could-do
  2. 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.jsonGemfile.lock ). 특히 Nodejs는 빠르게 움직이는 커뮤니티를 가지고 있습니다.

자동으로 bundle install생성하는 동안 생성 하지 않습니다 (존재할 때 사용합니다). 따라서 사용하는 것을 기억해야합니다.Gemfile.locknpm installnpm-shrinkwrapped.jsonnpm shrinkwrap .

http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/ 에서 전체 가이드 읽기


답변

가장 간단한 해결책은 플래그 (지난 달에 npm에 추가됨)가으로 설정된 package.json파일 을 사용하는 것 같습니다 . 그런 식으로 실행 하거나privatetruenpm installnpm bundle 프로젝트의 종속성을 있지만 다른 사람이 실수로 비공개 프로젝트를 게시하는 것을 방지 할 수 있습니다.

예를 들면 다음과 같습니다 package.json.

{
"name": "yourProject"
,"version": "1.0.0"
,"dependencies": { "express" : ">=2.1.0" }
,"private": true
}

실행 npm installexpress아직 존재하지 않는 경우 로컬 시스템에 설치 됩니다. 실행 npm publish하면 오류가 발생합니다."private": true .

사용자와 팀은 내부적으로 버전 태그를 사용하여 시간 경과에 따른 종속성 변경을 추적 할 수 있습니다. 종속성을 변경할 때마다 버전을 올릴 수 있습니다. 설치 한 버전을 확인하려면 npm ls installed.


답변

앱 게시 npm 하고 package.json 파일에 종속성을 나열합니다.

누군가가 npm패키지를 설치 하는 데 사용하면npm 종속성을 해결합니다.

패키지 사양 : http://wiki.commonjs.org/wiki/Packages/1.0


답변