“node_modules”文件夹应该包含在git仓库中
我想知道是否应该在我们的仓库中跟踪node_modules,或者在签出代码时进行npm安装?
答案并不像阿尔贝托·扎卡尼所说的那样简单。 如果你开发应用程序(特别是企业应用程序),包括你的git仓库中的node_modules是一个可行的select,你select哪一个select取决于你的项目。
因为他对node_modules的争论非常好,所以我将集中讨论他们的观点。
想象一下,你刚刚完成企业应用程序,你将不得不支持3 – 5年。 你绝对不想依靠某人的npm模块,明天可能会消失,你不能更新你的应用程序了。
或者你有你的私人模块不能从互联网上访问,你不能在互联网上build立你的应用程序。 或者,也许你不想依靠你最终的build设npm服务出于某种原因。
你可以在这篇Addy Osmani的文章中find优点和缺点(虽然是关于Bower,但情况几乎相同)。 最后,我会以Bower主页和Addy的文章引用结尾:
“如果你不是创作一个打算被别人使用的软件包(例如,你正在构build一个web应用程序),你应该总是把安装的软件包检查到源代码控制中。
模块细节存储在packages.json
,这就够了。 没有必要检查node_modules
。
人们习惯在版本控制中存储node_modules
来locking模块的依赖关系,但是使用npm不再需要的shrinkwrap。
另一个理由就是@ChrisCM在评论中写道:
另外值得注意的是,任何涉及本地扩展的模块都不能将体系结构用于体系结构,而需要重build。 提供具体的理由不包括他们在回购。
我build议不要检查node_modules,因为像PhantomJS和node-sass这样的软件包会为当前系统安装相应的二进制文件。
这意味着,如果一个Dev在Linux上运行npm install
,并检查node_modules – 对于在Windows上克隆repo的另一个Dev不起作用。
最好检查一下npm安装下载的tarball,并指向npm-shrinkwrap.json
。 您可以使用收缩包自动执行此过程。
不使用源代码pipe理来跟踪node_modules
是正确的select,因为一些NodeJS模块(如MongoDB NodeJS驱动程序)使用NodeJS C ++加载项。 运行npm install
命令时会编译这些附件。 所以,当你跟踪node_modules
目录时,你可能会意外提交一个操作系统特定的二进制文件。
还有一件事要考虑:检查node_modules
使得使用dependencies
和devDependencies
之间的区别变得困难/不可能。
另一方面,有人可能会说,向生产推送经过testing的完全相同的代码(包括devDependencies
。
在Windows上testing到Mac ios
如果您已经提交了Git Repository中除“ node_modules ”之外的所有文件。
您可以使用Git Clone
,只需运行npm install
命令从“ package.json ”文件中自动获取“ node_modules ”文件夹。
确保你提交“ package.json ”文件,以便从npm package manager
自动/直接获取依赖模块。