我爱Bundler,它在依赖管理方面很棒 . 我爱npm,安装节点包很容易!我有一个nodejs应用程序,并希望无论我在哪里部署我的应用程序都是 able to specify my apps dependencies and easily install / update them . 这不是't a library I' m发布,它是一个完整的网络应用程序 .
我知道 npm bundle
命令,但这似乎只是覆盖了安装包的目录 .
我习惯以这种方式使用bundler:
# Gemfile
gem "rails", "3.0.3"
仅在主机上存在rails v3.0.3和任何其他必需的gem时才会存在
> bundle install
How can I achieve something similar with npm?
6 回答
从npm 1.0开始(现在,如果您按照README文件中的步骤,默认情况下会得到),“bundle”不再是一个隔离的东西 - 它只是“它是如何工作的” .
所以:
将
package.json
文件放在项目的根目录中在该文件中列出您的deps
npm install
由于您're calling this with no args, and not in global mode, it' ll只是在本地安装所有deps .require("express")
,快乐 .编辑:这仅适用于npm版本<1.0
想出这个很难,但是 NPM makes this possible .
您需要三个组件
存储库中的子目录(即
deps/
)上面列出了依赖关系的目录中的
package.json
文件上述目录中的
index.js
文件需要您的依赖项示例
想象一下express是你唯一的依赖
deps / package.json
注意:每次修改依赖项时都会增加版本号
deps / index.js
现在,您应该能够使用npm安装依赖项 . 您甚至可以完成部署过程
然后在您的应用代码中,您可以访问您的特定版本的快递,如下所示:
你应该阅读Isaacs(作者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点)解释了这个:
从Npm版本1.1.2开始,有一个新命令npm shrinkwrap,它创建一个
npm-shrinkwrapped.json
文件,类似于Gemfile.lock
. 制作一个,以防止软件腐烂是很重要的(参见Bundler's rationale) . 特别是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/的完整指南
在我看来,最简单的解决方案是将
package.json
文件与private
标志(仅在上个月添加到npm)设置为true
. 这样,您可以运行npm install
或npm bundle
来获取项目的依赖项,但是您可以防止任何人意外发布您的非公共项目 .这是一个例子
package.json
:运行
npm install
将在本地系统上安装express
(如果它尚不存在);由于"private": true
,运行npm publish
会出错 .您和您的团队可以在内部使用版本标记来跟踪一段时间内的依赖关系更改 - 每次更改依赖关系时,都会使版本崩溃 . 要查看已安装的版本,请使用
npm ls installed
.同样使用
npm
发布您的应用程序,并在package.json文件中列出其依赖项 .当有人使用
npm
安装您的软件包时,npm
将负责解析其依赖项 .包规格:http://wiki.commonjs.org/wiki/Packages/1.0