2011-09-29 111 views
9

我已经遇到这种情况不少次,仍然没有找到答案。我开始一个新的Node.js项目,这个项目将依赖于其他一些库。为了争论起见,我们假设有些纯粹是JS库,可以在新项目中作为git子模块添加,但有些则需要一些额外的工作(比如npm安装的系统依赖项或必须编译的C库) )。如何在NPM上处理git项目中的Node.js依赖项?

什么是启动这个项目,并把它添加到Git的,有以下两个要求的最好办法:

  • 别人的图书馆并不是致力于为我们自己的回购协议,并代替子模块或拉动态和npm安装。
  • 不需要有一大串必须遵循的指令来克隆repo并创建工作环境。运行git子模块更新--init --recursive没问题,运行npm命令读取package.json并安装依赖关系很好(是否存在这样的命令?),但强制所有人都通过“npm install _ _“的每个依赖关系都不好,如果不需要,我宁愿不使用'make'或'ant'来做这件事。

任何想到这样做的最佳方法?它看起来像是一个简单而基本的东西,但我找不到我想要做的一个例子。

编辑:语法

+0

顺便说一句,你可以使用'git clone --recursive ... foo',它与'git clone ...相同...foo && cd foo && git submodule update --init --recursive' – Pauan

回答

10

编辑忽略以下,但留下供参考。有时候我并不想清楚早上:)

做出package.json文件,添加你的依赖和你的安装变得简单:从你的项目目录

npm install 

git ignore所有添加的项目。


npm submodule foo 

它通过git submodule所以github上安装软件包到node_modules,等会认识到,他们的链接。只要npm包含git URI,它就可以工作。不幸的是,很多人不这样做,所以你对这些人不太好运。

此外,请注意,当您这样做时,npm将不再适用于该模块,例如,你无法通过npm更新,你必须通过git


做或者你可以这样做:

./modules.js

modules.exports = [ '[email protected]', '[email protected]', '[email protected]' ]; 

。/make

#!/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] ]); 
} 
+0

Sheezus - 看起来很傻,我不知道'npm install'没有参数!这正是我所需要的......尽管您的定制解决方案也非常光滑!感谢您的帮助:)。 –

+0

谢谢你没有删除原来的anwser,这正是我所需要的。 :) – mik01aj