我想知道我们是否应该跟踪node_modules在我们的repo或做一个npm安装时检查出的代码?
当前回答
我建议不要签入node_modules,因为像PhantomJS和node-sass这样的包会为当前系统安装适当的二进制文件。
这意味着如果一个Dev在Linux上运行npm install并检入node_modules -它将不适用于另一个在Windows上克隆repo的Dev。
最好检查npm安装下载的tarball,并指向npm-shrinkwrap。Json。你可以使用收缩袋自动化这个过程。
其他回答
不使用源代码控制跟踪node_modules是正确的选择,因为一些NodeJS模块,如MongoDB NodeJS驱动程序,使用NodeJS c++附加组件。这些附加组件是在运行npm install命令时编译的。所以当你跟踪node_modules目录时,你可能会不小心提交一个OS特定的二进制文件。
模块详细信息存储在包中。Json就足够了。不需要签入node_modules。
人们习惯将node_modules存储在版本控制中,以锁定模块的依赖关系,但有了npm shrinkwrap,就不再需要这种方法了。
另一个理由是,@ChrisCM在评论中写道:
同样值得注意的是,任何涉及本机扩展的模块都不能在体系结构之间工作,需要重新构建。提供不将它们包括在回购中的具体理由。
如果package.json中提到了依赖关系,则Node_modules不需要检入。任何其他程序员都可以通过npm install来简单地获得它,npm足够聪明,可以让node_modules在你的项目工作目录中。
我建议不要签入node_modules,因为像PhantomJS和node-sass这样的包会为当前系统安装适当的二进制文件。
这意味着如果一个Dev在Linux上运行npm install并检入node_modules -它将不适用于另一个在Windows上克隆repo的Dev。
最好检查npm安装下载的tarball,并指向npm-shrinkwrap。Json。你可以使用收缩袋自动化这个过程。
还有一件事需要考虑:签入node_modules会使使用dependencies和devDependencies之间的差异变得更加困难/不可能。
另一方面,有人可能会说,将经过测试的完全相同的代码推向生产是令人放心的——因此包括devDependencies。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- ReferenceError: description没有定义NodeJs
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- 将一个二进制的NodeJS Buffer转换为JavaScript的ArrayBuffer
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支