如何使用NPM在git上的项目中处理Node.js依赖项?

Tom*_*ost 9 git node.js npm

我已经遇到过这种情况很多次了,但仍然没有找到答案.我正在开始一个新的Node.js项目,这个项目将依赖于其他一些库.为了论证,让我们说一些纯粹的JS库可以在新项目中作为git子模块添加,但是有些需要额外工作的部分(例如npm安装的系统依赖项,或者必须编译的C库) ).

什么是启动此项目并将其添加到git的最佳方式,具有以下两个要求:

  • 其他人的库不是我们自己的仓库,而是子模块,或者由npm动态拉入并安装.
  • 不需要有大量的指令列表,只需要克隆repo并拥有一个工作环境.运行git子模块更新--init --recursive很好,运行npm命令来读取package.json并安装依赖项很好(这样的命令是否存在?),但强制每个人都运行"npm install _ _"每一个依赖关系都没有问题,如果我不需要,我宁愿不使用'make'或'ant'来做到这一点.

有没有想过最好的方法呢?这似乎是一个简单,基本的东西,但我找不到我想要做的一个例子.

编辑:语法

Mar*_*ahn 10

编辑忽略下面,但留待参考.有时我早上没想清楚:)

创建一个package.json文件,添加你的依赖项,你的安装就变成了:

npm install
Run Code Online (Sandbox Code Playgroud)

从您的项目目录. git ignore所有添加的项目.


npm submodule foo
Run Code Online (Sandbox Code Playgroud)

它将软件包安装到node_modulesvia中,git submodule因此github等会认识到它们是链接.只要npm包中包含git URI,这就有效.不幸的是,很多人没有,所以你对那些运气不好.

此外,请注意,当您执行此操作时,npm将无法再对模块进行操作,例如,您无法通过更新npm,您必须通过git


或者你可以做一些像:

./modules.js

modules.exports = [ 'express@1.0', 'jade@2.0', 'stylus@3.0' ];
Run Code Online (Sandbox Code Playgroud)

./使

#!/usr/bin/env node
var modules = require( './modules' )
  ,   spawn = require('child_process').spawn;

for( var i=0, l=modules.length; i<l; i++ ){
    spawn( 'npm', [ 'install', modules[i] ] );
}
Run Code Online (Sandbox Code Playgroud)