我喜欢Bundler,它非常适合依赖管理。我喜欢npm,安装节点包很容易!我有一个nodejs应用程序,并希望能够指定我的应用程序依赖项并轻松安装/更新它们无论我在哪里部署我的应用程序。这不是我发布的图书馆,它是一个完整的网络应用程序。
我知道npm bundle
命令,但这似乎只是覆盖了安装软件包的目录。
我习惯以这种方式使用bundler:
# Gemfile
gem "rails", "3.0.3"
仅在主机上存在rails v3.0.3和任何其他所需的宝石
> bundle install
如何使用npm实现类似的功能?
答案 0 :(得分:144)
从npm 1.0开始(现在,如果您按照README文件中的步骤,默认情况下会得到),“bundle”不再是一个隔离的东西 - 它只是“它是如何工作的”。
所以:
package.json
文件放在项目的根目录中在该文件中列出您的deps
{ "name" : "my-project"
, "version" : "1.0.0"
, "dependencies" : { "express" : "1.0.0" } }
npm install
由于您在没有args的情况下调用它,而不是在全局模式下调用它,它只会在本地安装所有deps。
require("express")
并且快乐。答案 1 :(得分:10)
很难弄清楚这一点,但 NPM使这成为可能。
deps/
)package.json
文件index.js
文件想象一下,express是您唯一的依赖
注意:每次修改依赖项时都会增加版本号
{
"name": "myapp_dependencies",
"version": "0.0.1",
"engines": {
"node": "0.4.1"
},
"dependencies":{
"express": "2.0.0beta2"
}
}
export.modules = {
express: require('express')
//add more
}
现在您应该可以使用npm安装依赖项了。您甚至可以将此部分作为部署过程的一部分
cd deps
npm install
然后在您的应用代码中,您可以访问特定版本的快递:
var express = require('myapp_dependencies').express;
答案 2 :(得分:5)
你应该阅读Isaacs(作者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捆绑rm 事情。当然,你可以安装 多个版本并激活一个 你想要的。
答案 3 :(得分:2)
在我看来,最简单的解决方案是使用package.json
文件,将private
标志(仅在上个月添加到npm)设置为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
。
答案 4 :(得分:2)
从Npm版本1.1.2开始,有一个新命令npm shrinkwrap
,它创建一个npm-shrinkwrapped.json
文件,类似于Gemfile.lock
。制作一个,以防止软件腐烂是很重要的(见Bundler's rationale)。特别是Nodejs拥有如此快速发展的社区。 p>
虽然bundle install
会自动创建Gemfile.lock
,但npm install
不会创建npm-shrinkwrapped.json
(但会在存在时使用它)。因此,您需要记住使用npm shrinkwrap
。
阅读http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/
的完整指南答案 5 :(得分:1)
使用npm
发布您的应用,并在package.json文件中列出其依赖项。
当有人使用npm
安装您的软件包时,npm
将负责解析其依赖项。