使用npm安装或更新所需的软件包,就像rubygems的bundler一样

我喜欢Bundler ,在依赖pipe理方面很棒。 我喜欢npm ,安装节点包很简单! 我有一个nodejs应用程序,并希望能够指定我的应用程序依赖关系,并轻松地安装/更新他们,无论我部署我的应用程序。 这不是我发布的图书馆,它是一个完整的networking应用程序。

我知道npm bundle命令,但似乎只是覆盖安装软件包的目录。

我习惯以这种方式使用捆绑器:

 # Gemfile gem "rails", "3.0.3" 

在主机上安装rails v3.0.3和任何其他所需的gem,只要它不存在

 > bundle install 

我怎样才能达到与npm类似的东西?

从npm 1.0开始(现在,如果您按照README文件中的步骤操作,默认情况下是这样的),“bundle”不再是一个独立的东西 – 它只是“它是如何工作的”。

所以:

  1. 把一个package.json文件放在你的项目的根目录下
  2. 列出你的代表在那个文件

     { "name" : "my-project" , "version" : "1.0.0" , "dependencies" : { "express" : "1.0.0" } } 
  3. npm install因为你没有args而不是以全局模式调用它,它只会在本地安装你所有的代理。

  4. require("express")和快乐。

编辑:这只适用于npm版本<1.0


要弄清楚这一点是相当困难的,但NPM使这成为可能

你需要三个组件

  1. 存储库中的一个子目录(即deps/
  2. 上面的目录中的package.json文件列出了依赖关系
  3. 上述目录中的index.js文件需要您的依赖关系

想象一下, expression是你唯一的依赖

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 

然后,在您的应用程序代码中,您可以访问您的特定版本的快递,如下所示:

 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文件夹中。 但它并不止于此。

如果你想依赖registry中没有的东西,你可以这样做。 只要这样做:

npm bundle install http://github.com/whoever/whatever/tarball/master这会将这个tarball的内容安装到bundle中,然后你可以把它列为一个依赖项,当它不会尝试安装的时候你的软件包被安装。;

如果你有自己的分支,这也很方便,并且不希望改变名字。

实际上,你可以在软件包中运行几乎所有的npm命令。 看看里面有什么,你可以做npm bundle ls。 要删除的东西,做npm捆绑rm的东西。 而且,当然,你可以安装多个版本并激活你想要的。

从Npm版本1.1.2开始,有一个新命令npm shrinkwrap ,它创build一个npm-shrinkwrapped.json Gemfile.lock文件,类似于Gemfile.lock 。 做一个防止软件腐败非常重要(参见Bundler的基本原理 )。 特别是Nodejs有这样一个快速移动的社区。

虽然bundle install会自动创build一个Gemfile.lock ,但是npm install不会创buildnpm-shrinkwrapped.json (但会在它存在时使用它)。 因此你需要记住使用npm shrinkwrap

http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/阅读完整指南;

在我看来,最简单的解决scheme是使用一个package.json文件与private标志(添加到npm上个月)设置为true 。 这样,您可以运行npm installnpm 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发布你的应用npm ,并在你的package.json文件中列出它的依赖关系。

当有人使用npm来安装你的软件包时, npm将负责解决它的依赖关系。

软件包规格: http : //wiki.commonjs.org/wiki/Packages/1.0