签入 node_module 是社区标准,但现在我们也可以选择使用 shrinkwrap。后者对我来说更有意义,但总有可能有人“强制发布”并引入了错误。有什么额外的缺点吗?
2 回答
我最喜欢的关于这个主题的帖子/哲学可以追溯到 2011 年(在 node.js 领域很长一段时间):
https://web.archive.org/web/20150116024411/http://www.futurealoof.com/posts/nodemodules-in-git.html
直接引用:
如果您有要部署的应用程序,请将所有依赖项签入 node_modules。如果您使用 npm do deploy,只需为这些模块定义 bundleDependencies。如果您有需要编译的依赖项,您仍然应该签入代码并在部署时运行 $ npm rebuild。
我告诉过这个的每个人都告诉我我是个白痴,然后几周后告诉我我是对的,将 node_modules 签入 git 对部署和开发来说是一件好事。客观上更好,但这里有一些我似乎得到的问题/投诉。
我认为这仍然是最好的建议。
强制发布场景很少见,npm shrinkwrap
可能适用于大多数人。node_modules
但是,如果您要部署到生产环境,没有什么比检入整个目录更能让您高枕无忧了。
或者,如果您真的,真的不想签入node_modules
目录但想要更好地保证没有强制推送,我会遵循以下建议npm help shrinkwrap
:
如果您想避免拜占庭作者用破坏您的应用程序的代码替换您正在使用的包的任何风险,您可以修改收缩包装文件以使用 git URL 引用而不是版本号,以便 npm 始终从 git 获取所有包。
当然,有人可以运行一个奇怪的git rebase
东西并修改一个 git commit 哈希......但现在我们快疯了。
npm FAQ 直接回答了这个问题:
- 将 node_modules 检入 git 以获取您部署的内容,例如网站和应用程序。
- 不要将 node_modules 签入 git 以获取打算重用的库和模块。
- 使用 npm 管理开发环境中的依赖项,而不是部署脚本中的依赖项。
引用自npm FAQ