使用npm来安装或更新所需的软件包就像bundle for ruby​​gems一样

Dan*_*ley 87 javascript dependencies bundler node.js npm

我喜欢Bundler,它非常善于依赖管理.我爱npm,安装节点包很容易!我有一个nodejs应用程序,并希望能够指定我的应用程序依赖项,并在我部署我的应用程序的任何地方轻松安装/更新它们.这不是我发布的图书馆,它是一个完整的网络应用程序.

我知道这个npm bundle命令,但这似乎只是覆盖了安装包的目录.

我习惯以这种方式使用bundler:

# Gemfile
gem "rails", "3.0.3"
Run Code Online (Sandbox Code Playgroud)

仅在主机上存在rails v3.0.3和任何其他必需的gem时才会存在

> bundle install
Run Code Online (Sandbox Code Playgroud)

如何用npm实现类似的功能?

isa*_*acs 146

从npm 1.0开始(现在,如果您按照README文件中的步骤,默认情况下会得到),"bundle"不再是一个隔离的东西 - 它只是"它是如何工作的".

所以:

  1. package.json文件放在项目的根目录中
  2. 在该文件中列出您的deps

    { "name" : "my-project"
    , "version" : "1.0.0"
    , "dependencies" : { "express" : "1.0.0" } }
    
    Run Code Online (Sandbox Code Playgroud)
  3. npm install 由于你在没有args的情况下调用它,而不是在全局模式下,它只是在本地安装你所有的deps.

  4. require("express") 而且要快乐.

  • 这不太正确.NPM将在`./ node_modules/my-project/node_modules`中安装上述`my-project`的所有依赖项.我不确定是否有一种方便的方法让它在`./ node_modules`中安装所有依赖项? (4认同)
  • 在制作时,我强烈建议将本地`your_app/node_modules`目录更改为app目录外的符号链接.您不希望每次部署时都必须下载,构建和安装每个依赖项. (2认同)
  • 同意@DanielBeardsley.即使使用npm 1.1.70,我也会遭受这种行为 (2认同)

Dan*_*ley 10

编辑:这仅适用于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"
  }
}
Run Code Online (Sandbox Code Playgroud)

DEPS/index.js

export.modules = {
  express: require('express')
  //add more
}
Run Code Online (Sandbox Code Playgroud)

现在,您应该能够使用npm安装依赖项.您甚至可以完成部署过程

cd deps
npm install
Run Code Online (Sandbox Code Playgroud)

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

var express = require('myapp_dependencies').express;
Run Code Online (Sandbox Code Playgroud)


Alf*_*red 5

你应该阅读Isaacs(作者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的内容安装到bundle中,然后你可以将它列为依赖项,并且它不会尝试安装它您的包已安装.

如果你有自己的东西,并且不想更改名称,这也很方便.

实际上,您可以在捆绑包上运行几乎任何npm命令.要查看内部的内容,您可以执行npm bundle ls.要删除某些东西,请执行npm bundle rm thing.当然,您可以安装多个版本并激活您想要的版本.