我想知道我们是否应该跟踪node_modules在我们的repo或做一个npm安装时检查出的代码?


当前回答

还有一件事需要考虑:签入node_modules会使使用dependencies和devDependencies之间的差异变得更加困难/不可能。

另一方面,有人可能会说,将经过测试的完全相同的代码推向生产是令人放心的——因此包括devDependencies。

其他回答

还有一件事需要考虑:签入node_modules会使使用dependencies和devDependencies之间的差异变得更加困难/不可能。

另一方面,有人可能会说,将经过测试的完全相同的代码推向生产是令人放心的——因此包括devDependencies。

不使用源代码控制跟踪node_modules是正确的选择,因为一些NodeJS模块,如MongoDB NodeJS驱动程序,使用NodeJS c++附加组件。这些附加组件是在运行npm install命令时编译的。所以当你跟踪node_modules目录时,你可能会不小心提交一个OS特定的二进制文件。

我看这个话题已经很老了。但由于npm生态系统的情况发生了变化,我错过了这里提供的一些参数的更新。

我总是建议不要将node_modules置于版本控制之下。在公认的答案中列出的几乎所有这样做的好处到目前为止都已经过时了。

已经发布的包不能轻易地从npm注册表中撤销了。因此,您不必担心失去项目以前所依赖的依赖项。 把package-json。VCS中的lock文件有助于频繁更新依赖关系,虽然依赖于同一个包,但可能会导致不同的设置。json文件。

因此,在使用脱机构建工具的情况下,将node_modules放入VCS中可能被认为是剩下的唯一合格的用例。然而,node_modules通常增长得很快。任何更新都会改变很多文件。这以不同的方式影响着存储库。如果你真的考虑到长期影响,这也可能是一个障碍。

像svn这样的集中式VCS需要通过网络传输提交和签出的文件,这在签出或更新node_modules文件夹时将会非常慢。

When it comes to git this high number of additional files will instantly pollute the repository. Keep in mind that git isn't tracking differences between versions of any file, but is storing copies of either version of a file as soon as a single character has changed. Every update to any dependency will result in another large changeset. Your git repository will quickly grow huge because of this affecting backups and remote synchronization. If you decide to remove node_modules from git repository later it is still part of it for historical reasons. If you have distributed your git repository to some remote server (e.g. for backup) cleaning it up is another painful and error-prone task you'd be running into.

因此,如果您关心高效的流程,并且喜欢保持事情“小”,我宁愿使用单独的工件存储库,如Nexos repository(或只是一些带有ZIP存档的HTTP服务器),提供一些先前获取的依赖集供下载。

我想提供一个中间路线的选择。

不要在git中添加node_modules。 使用包锁。Json文件来确定你的依赖版本。 在CI或发布过程中,当你发布一个版本时,复制node_modules文件夹并备份它(例如在云存储中)。

在极少数情况下,你不能访问NPM(或你使用的其他注册表)或NPM中的特定包,你有一个node_modules的副本,可以继续工作,直到恢复访问。

我建议不要签入node_modules,因为像PhantomJS和node-sass这样的包会为当前系统安装适当的二进制文件。

这意味着如果一个Dev在Linux上运行npm install并检入node_modules -它将不适用于另一个在Windows上克隆repo的Dev。

最好检查npm安装下载的tarball,并指向npm-shrinkwrap。Json。你可以使用收缩袋自动化这个过程。