我准备用node.js做一个大项目,目前尝试排序一些。
在早期的节点项目中,我有一个额外的文件夹,用于我使用的所有节点模块。这个文件夹被git忽略了,我通过git子模块管理版本和更新,这并不容易(没有依赖,更新到新版本并不总是很有趣。)
我在寻找的是:
npm install packagename
npm dump_modules_into_file
所以参与这个项目的其他人都可以这样做:
npm install_or_update_modules_from_file
我不想让我的git存储库跟踪node_modules
。基本上我想要类似于symonfy2处理它的方法bundles。
P.S。:我知道npm submodule packagename
,但是这个命令不是很有帮助,因为它没有安装依赖项,也没有更新模块。
P.S.2:我准备好package.json
,但这也存在一些缺陷。 (没有参数,您必须手动更新模块版本。)
答案 0 :(得分:6)
package.json
将实现您的目标。在关于传递--mongodb:native
标志的注释中,该标志是npm
命令的参数, 在您自己的项目中使用package.json
时工作。 mongodb包有一个“安装脚本”,它在节点处理环境中查找该标志。如果存在该标志,则它会为构建生成另一个进程。所以,如果你将mongodb作为package.json中的依赖项
{
"name": "MyProject"
, "description": "Test"
, "version": "0.0.1"
, "dependencies": {
"mongodb": "*"
}
}
正在运行npm install --mongodb:native
将工作。
关于“手动更新” - 它实际上只是第一次可能需要一段时间,而且我确信如果有很多依赖项,你可以编写一个脚本来生成它。然而,听起来你有一个相当大的团队,如果是这样的话,那么自动化package.json
的更新将变得非常难看(想想新的开发人员,实验性功能等)。这部分开发周期不一定是个坏主意。
参考文献:
编辑:正如Nick所说,将'node_modules'目录添加到.gitignore
会阻止任何这些文件被检入您的仓库
答案 1 :(得分:2)
Afaik,进行包管理的唯一方法就是你所描述的,虽然我不确定你对wrt package.json不感兴趣。
如果您想严格控制您使用的模块版本,您可以明确指定版本号。您也可以使用>=X.X.X
方法自动获取最新(超过阈值),这有时可用于开发目的。
这可以让你的队友做到:
npm install .
将安装package.json文件中列出的所有依赖项。这些将安装到./node_modules
,但您可以.gitignore
注意到这一点。
答案 2 :(得分:1)
为了完全测试程序包配置并确保模块在最终部署中的行为,我现在使用以下过程。它完全避免了破解node_module目录或require()
代码的需要,因此当你去部署它时正常工作。
对于内部项目或预发布到github,您可能还需要在"private": true
中设置package.json
,以便npm
拒绝发布。{/ p>
在git版本控制下创建项目目录,并将所有您的节点模块添加为子目录。子目录名称必须与其包名称匹配。如果您正在使用github,则需要为每个模块目录创建一个单独的git仓库。它们可以是项目仓库中的git子模块。将node_module
添加到.gitignore
个文件中。
安装npm-server之类的工具并在项目目录中运行它。然后将npm注册表设置为localhost,现在npm
将与您的本地npm服务器通信以获取包。任何它发现它将发送的子目录。任何它没有找到它将代理registry.npmjs.org
。
$ npm set registry http://localhost:6070/
$ cd ~/projects
$ npm-server
启动一个新shell并创建一个单独的沙箱目录
$ mkdir sandbox
$ cd sandbox
使用本地注册表服务器安装您的应用。清除本地npm缓存并重新安装您的应用。我在一行上执行此操作,因此很容易通过shell重做。您可能想要编写脚本。
$ npm cache clear; sleep 3; npm uninstall -g app; sleep 3; npm install -g app
测试您的应用:
$ app ....
在您完成安装后取消注册本地npm注册表:
$ npm set registry http://registry.npmjs.org:80/
完成测试后,您可以发布应用并在npm-server停止时重新测试部署。
$ cd ~/projects
$ npm publish app
而不是注册&取消注册服务器,您可以使用localhost服务器进行一次性安装:
$ 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