当我将项目发布到GitHub时,我应该如何处理Grunt的node_modules目录?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当我将项目发布到GitHub时,我应该如何处理Grunt的node_modules目录?相关的知识,希望对你有一定的参考价值。
这是我使用Grunt和Git的第一个项目。在我的项目中,我有'* node_modules *'目录,我是通过命令'npm install grunt'创建的。现在我想将我的项目发布到GitHub。
我的项目应该包含'node_modules'还是我应该省略它?我担心这会让那些不熟悉Grunt的开发人员感到害怕。事实上,我很困惑为什么你应该分别为每个项目安装grunt。为什么不可能在全球安装它?
这是我的安装:grunt-contrib-concat,grunt-contrib-jshint,grunt-contrib-qunit,grunt-contrib-uglify,grunt-contrib-watch。
你不应该全局安装grunt和grunt插件的原因是因为那样你一次只能安装1个版本。在与团队合作时,这也意味着团队中的每个成员都必须运行相同版本的grunt和每个grunt插件。
当你跳转到不同的项目时,与团队协调这些版本并切换版本是一场噩梦。解决方案,在本地安装一切。它只是文件空间,大多数模块不占用大量空间。
大多数人不会将他们的node_modules
文件夹提交到github。通过在同一文件夹中键入:package.json
,可以再次安装npm install
中列出的每个依赖项。
在安装插件和模块时,使用npm install grunt --save-dev
保存到package.json
。
承诺node_modules
(IMO)的唯一合理理由是私人应用程序和回购打算部署到生产。在哪里你想确定你的依赖关系被锁定而不是在推送时破坏某些东西。还有其他策略可以避免提交node_modules
,即使使用这个用例(例如npm shrinkwrap)。
简而言之:
- 如果您正在部署应用程序并且关于锁定deps的偏执,请提交node_modules。
- 其他一切,不要提交你的node_modules。
@“提交node_modules,IMO的唯一合理理由是私有应用程序和repo打算部署到生产中。”
我开始时从不将node_modules提交到repo中,只提交package.json中的更改。但事实证明,对于一个拥有多个开发人员和一些实验性功能分支的项目来说,这是一个非常糟糕的主意。由于node_module文件夹未使用git进行版本控制,因此最终需要在每个分支交换机上运行npm install,因为模块之间的版本可能不同。一场真正的噩梦...
你最终会听到“这个废话再次无效!!”,只是因为有人更新了功能分支中的节点模块。所以我现在建议为包含多个开发人员和分支的项目添加node_modules。带走了很多痛苦......
编辑:只是想添加一些其他的东西要记住签入/未签入的节点模块我必须(痛苦地)学习:
- 总是在package.json中锁定你的版本 - 这意味着基本上删除你的软件包版本号前面的所有修改器(如:〜,>,*和任何可能的)如果你有人运行npm install,你希望它们完全得到它们你有什么(理论上的语义版本很棒,而且很遗憾,它只是不可靠,而你永远不会希望在没有你知道的情况下更新软件包)。否则只是看着世界燃烧一遍又一遍......
编辑(28.02.2018):这不再需要 - 因为在新版本中,npm-和yarn-package管理器在安装时生成.lock文件 - 定义确切安装的软件包版本 - 可以提交和使用其他开发者。
- 如果在混合操作系统Envirement中工作,则会出现一些有问题的grunt-packages,只应谨慎检查,例如grunt-imagemin,这可能会阻碍Windows上的检查,因为它们的路径很长。 Filename too long in git for windows
- 我发现最好将我的工作流自动化和相应的npm包放入其自己的子文件夹/存储库中,以实现可重用性和更好的项目维护 - 因为它使自动化模块不会与实际的nodejs应用程序包混合。
以上是关于当我将项目发布到GitHub时,我应该如何处理Grunt的node_modules目录?的主要内容,如果未能解决你的问题,请参考以下文章