应该";节点“U模块”;无法将文件夹包含在git存储库中
我想知道我们是应该在我们的repo中跟踪node_模块,还是在签出代码时安装npm?模块详细信息存储在应该";节点“U模块”;无法将文件夹包含在git存储库中,git,node.js,version-control,npm,Git,Node.js,Version Control,Npm,我想知道我们是应该在我们的repo中跟踪node_模块,还是在签出代码时安装npm?模块详细信息存储在包中。json,这就足够了。无需签入节点\u模块 人们过去常常在版本控制中存储node\u模块,以锁定模块的依赖项,但现在不再需要了 这一点的另一个理由是@ChrisCM在评论中写道: 同样值得注意的是,任何涉及本机扩展的模块都无法在体系结构之间工作,需要重新构建。提供不将其纳入回购协议的具体理由 答案并不像你想象的那么简单。如果您开发应用程序(尤其是企业应用程序),那么在git repo中包含
包中。json
,这就足够了。无需签入节点\u模块
人们过去常常在版本控制中存储node\u模块
,以锁定模块的依赖项,但现在不再需要了
这一点的另一个理由是@ChrisCM在评论中写道:
同样值得注意的是,任何涉及本机扩展的模块都无法在体系结构之间工作,需要重新构建。提供不将其纳入回购协议的具体理由
答案并不像你想象的那么简单。如果您开发应用程序(尤其是企业应用程序),那么在git repo中包含节点_模块是一个可行的选择,您选择哪种替代方案取决于您的项目 因为他很好地反对node_模块,所以我将集中讨论它们的论点 想象一下,您刚刚完成企业应用程序,您必须支持它3-5年。你肯定不想依赖某个人的npm模块,它明天可能会消失,你也不能再更新你的应用程序了 或者,您的私人模块无法从internet访问,您无法在internet上构建应用程序。或者,出于某种原因,您可能不想依赖npm服务的最终构建 你可以找到优点和缺点(虽然是关于鲍尔的,但情况几乎是一样的)。最后,我将引用鲍尔主页和艾迪的文章: “如果您编写的软件包不是供其他人使用的(例如,您正在构建web应用程序),则应始终将已安装的软件包签入源代码管理。”
我建议不要签入node_模块,因为像PhantomJS和node sass这样的软件包为当前系统安装了适当的二进制文件 这意味着,如果一个开发人员在Linux上运行
npm install
,并签入节点模块,那么它将不适用于另一个在Windows上克隆repo的开发人员。
最好检查一下npm安装下载的tarball,并指向
npm shrinkwrap.json
。可以使用.不跟踪<代码> NoDEYMease源代码控制是正确的选择,因为一些NoDEJS模块,如MangoDB NoDEJS驱动程序,使用NoDEJS C++插件。这些附加组件是在运行npm install
命令时编译的。因此,当您跟踪node\u模块
目录时,可能会意外地提交一个特定于操作系统的二进制文件。需要考虑的另一件事是:签入node\u模块
会使使用依赖项
和依赖项
之间的差异变得更加困难/不可能
另一方面,如果package.json中提到了依赖项,则可以说推出经过测试的完全相同的代码是令人放心的——因此,如果package.json中提到依赖项,则不需要签入包含
devdependency
节点的模块。任何其他程序员都可以通过执行npm安装来获得它,并且npm足够智能,可以使项目的工作目录中的节点模块工作。我知道,这个主题非常古老。但由于npm生态系统的情况发生了变化,我错过了这里提供的一些更新
我总是建议不要将node_模块置于版本控制之下。目前为止,在公认答案的上下文中列出的几乎所有这样做的好处都已经过时了
场景1: 一种情况: 您使用从npm中删除的包。 如果您在文件夹node_modules中有所有模块,那么对您来说就不会有问题。 如果package.json中只有包名,则可以
"dependencies": {
"studpid-package": "~1.0.1"
}