Node.js node_modules 与 Linux/Unix 和 Windows 开发人员一起签入 git?

Posted

技术标签:

【中文标题】Node.js node_modules 与 Linux/Unix 和 Windows 开发人员一起签入 git?【英文标题】:Node.js node_modules checked into git with Linux/Unix & Windows developers? 【发布时间】:2014-08-28 00:27:13 【问题描述】:

我和一位同事正在构建一个 Node.js 网络应用程序。我在 Unix 环境 (Mac OSX) 中运行,而他正在运行 Windows。关于 node_modules 文件夹的 current advice 是,这应该被签入到源代码控制 (git) 以用于您部署的应用程序(但不适用于 npm 中的包)。

但是,我们遇到了编译包的问题(如果这是正确的术语),例如 node-canvas。当我运行 npm install canvas 而他运行 npm install canvas 时,我们得到的 node_modules/canvas 文件夹看起来都非常不同,这显然会导致源代码冲突。

我们如何解决这个问题?

【问题讨论】:

【参考方案1】:

这就是您没有将node_modules 放入项目存储库,而是维护依赖项 json 列表的确切原因。

此外,node_modules 很可能是您项目中最重的文件夹,在您的存储库超载方面扮演着主要角色。


在建议中,他们建议不要使用 npm 来管理生产中部署的依赖项。这很有意义,您不希望您的生产服务器依赖额外的服务(npm 本身和模块的作者)

在您的情况下,您正在开发,npm 建议您也使用依赖项:

• 使用 npm 管理开发环境中的依赖项

【讨论】:

我认为你是对的。但奇怪的是这个建议(将模块放入源代码控制)直接来自马口(npm 人)。 @SundayIronfoot 是的,正如我猜想的那样,另一边有一些真相。修改了问题。他们实际上告诉您也将 NPM 用于开发,但不用于生产服务器本身。【参考方案2】:

将node_modules放入git的主要原因是锁定依赖项的依赖关系,如http://www.futurealoof.com/posts/nodemodules-in-git.html所述。因此,即使有人从 npm 中删除了依赖模块,您也可以确保您所拥有的一切都能正常工作。

但是,是的,这种方法可能会导致您遇到的问题。 我个人不喜欢将 node_modules 放到 git 中,而是使用npm shrinkwrap 来进行依赖锁定,如此处所述https://www.npmjs.org/doc/cli/npm-shrinkwrap.html。

【讨论】:

以上是关于Node.js node_modules 与 Linux/Unix 和 Windows 开发人员一起签入 git?的主要内容,如果未能解决你的问题,请参考以下文章

如何选择与webpack捆绑的node_modules dist flavor

签入 node_modules 与 shrinkwrap

Node.js node_modules 相互干扰

为啥 node.js 安装两个“node_modules”文件夹?

将具有 node_modules 的本地 Node.js 项目 Git 存储库推送到 Heroku 时,本地 node_modules 是不是会覆盖 Heroku 上的那些?

Heroku+Node.js 如何克隆 node_modules?