使用node.js npm和git的最佳工作stream程
我正要用node.js做一个大型的项目,目前尝试分出一些东西。
在之前的节点项目中,我使用了所有节点模块的额外文件夹。 这个文件夹被git忽略,我pipe理的版本和通过git子模块更新,这是不容易的(没有依赖关系,更新到新版本并不总是很有趣)。
我正在寻找的是:
npm install packagename
npm dump_modules_into_file
所以参与这个项目的其他人都可以这样做:
npm install_or_update_modules_from_file
我不想让我的git仓库跟踪node_modules
。 基本上我想要类似于symonfy2如何处理它捆绑 。
PS:我知道npm submodule packagename
,但这个命令不是很有帮助,因为它不会安装依赖关系,也不会更新模块。
PS2:我准备好了package.json
,但是这也有一些缺陷。 (没有参数,您必须手动更新模块版本。)
package.json
将完成你正在寻找的东西。 在关于传递--mongodb:native
标志的注释中,该标志是npm
命令的一个参数,在您自己的项目中使用package.json
时会起作用。 mongodb包有一个“安装脚本”,在节点处理环境中查找该标志。 如果这个标志存在,那么它会产生另一个构build过程。 所以,如果你在package.json中有mongodb作为依赖
{ "name": "MyProject" , "description": "Test" , "version": "0.0.1" , "dependencies": { "mongodb": "*" } }
运行npm install --mongodb:native
会工作。
关于“手工更新” – 这只是第一次,可能需要一段时间,我相信你可以写一个脚本来生成它,如果有很多的依赖。 然而,这听起来像你有一个相当大的团队,如果是这样的话,那么自动更新package.json
将变得非常丑陋(认为新的开发人员,实验function等)。的开发周期不一定是个坏主意。
参考文献:
- https://github.com/christkv/node-mongodb-native/blob/master/install.js
- http://package.json.nodejitsu.com/ (请参阅“脚本”部分)
编辑 :如尼克提到的,添加“node_modules”目录.gitignore
将阻止任何这些文件被检入您的回购
这里有一篇很好的文章,解释了什么时候你应该也不应该检查你的node_modules到git中。 可以回答你的问题。
git中的node_modules
Afaik,做包pipe理的唯一方法是你所描述的,虽然我不确定你对wrt package.json不感兴趣。
如果你想严格控制你使用的模块版本,你可以明确指定版本号。 您也可以使用>=XXX
方法来自动获取最新的(超过阈值),这对于开发目的而言有时是很好的。
这可以让你的队友做到:
npm install .
它将安装package.json文件中列出的所有依赖项。 这些将安装到./node_modules
但你可以.gitignore
,如你所述。
为了全面testing软件包configuration,并确保模块的行为与最终部署时的行为一致,现在使用以下过程。 它完全避免了需要破解node_module目录或require()
代码,所以当你去部署它只是工作 。
对于内部项目或预发布到github,你也可能想在你的package.json
设置"private": true
,所以npm
将拒绝发布它。
-
在git版本控制下创build一个项目目录,并将所有节点模块添加为子目录。 子目录名称必须与其包名称匹配。 如果您正在使用github,则需要为每个模块目录创build一个单独的git repo。 他们可以在你的项目回购git submodules。 将
node_module
添加到.gitignore
文件。 -
安装像npm-server这样的工具并在项目目录中运行它。 然后将npmregistry设置为localhost,以便现在
npm
将会与您本地的npm服务器进行通信以获取软件包。 它发现它将发送的任何子目录。 任何它没有find它将代理registry.npmjs.org
。$ npm set registry http://localhost:6070/ $ cd ~/projects $ npm-server
-
启动一个新的shell并创build一个单独的沙箱目录
$ mkdir sandbox $ cd sandbox
-
使用本地registry服务器安装您的应用程序 清除本地的npmcaching并重新安装你的应用程序。 我在一行上做这个,所以很容易通过shell重做。 你可能想编写它。
$ npm cache clear; sleep 3; npm uninstall -g app; sleep 3; npm install -g app
-
testing你的app:
$ app ....
-
完成安装后,注销本地npmregistry:
$ npm set registry http://registry.npmjs.org:80/
-
完成testing后,您可以发布您的应用程序,并在npm-server停止的情况下重新testing部署。
$ cd ~/projects $ npm publish app
而不是注册和注销服务器,你可以使用本地主机服务器进行一次性安装: $ npm --registry=http://localhost:6070/ install app
我正在写分叉版本的npm-server
所以你只需要: $ npmsvr on // Registers local registry server $ npmsvr start // Start local registry server $ npmsvr off // Deregisters local registry server