当我将项目发布到GitHub时,我应该如何处理Grunt的node_modules目录?

时间:2014-02-01 05:00:48

标签: git gruntjs

这是我使用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。

2 个答案:

答案 0 :(得分:7)

你不应该全局安装grunt和grunt插件的原因是因为那样你一次只能安装1个版本。在与团队合作时,这也意味着团队中的每个成员都必须运行相同版本的grunt和每个grunt插件。

当你跳转到不同的项目时,与团队协调这些版本并切换版本是一场噩梦。解决方案,在本地安装一切。它只是文件空间,而且大多数模块都没有占用大量空间。

大多数人都没有将他们的node_modules文件夹提交到github。通过在同一文件夹中键入:package.json,可以再次安装npm install中列出的每个相关性。

在安装插件和模块时,使用npm install grunt --save-dev保存到package.json

提交node_modules IMO的唯一合理理由是私有应用程序和repo旨在部署到生产环境中。在哪里你想确定你的依赖关系被锁定而不是在推送时破坏某些东西。还有其他策略可以避免提交node_modules,即使使用这种用例(例如npm shrinkwrap)。

简而言之:

  • 如果您正在部署应用程序并且想要锁定您的deps,那么提交您的node_modules
  • 其他所有内容,不提交node_modules

答案 1 :(得分:3)

  

@“提交node_modules,IMO的唯一合理理由是使用   旨在部署到生产的私人申请和回购。“

我开始时从不将node_modules提交到repo中,只提交package.json中的更改。但事实证明,对于一个拥有多个开发人员和一些实验性功能分支的项目来说,这是一个非常糟糕的主意。由于node_module文件夹未使用git进行版本控制,因此最终需要在每个分支交换机上运行npm install,因为模块之间的版本可能不同。一场真正的噩梦......

你最终会听到“这个废话再次无效!!”,只是因为有人更新了功能分支中的节点模块。所以我现在建议为包含多个开发人员和分支的项目添加node_modules。带走了很多痛苦......

编辑:只想添加一些其他的东西,记住我必须(痛苦地)学习的节点模块中的签入/未签入:

  1. 始终在package.json中锁定您的版本 - 这意味着 基本上删除包前面的所有修改器 版本号(如:〜,>,*和其他任何可能的)如果你有 有人运行npm install,你希望他们完全得到你所拥有的 (理论上的语义版本很棒,而且很抱歉 只是不可靠,你永远不会/希望更新包 你不知道)。否则只是看世界烧毁和 再一次......
  2. 编辑(28.02.2018):这不再需要 - 就像新版本一样     npm-和yarn-package管理器在安装时生成.lock文件 -     定义确切安装的软件包版本 - 可以提交和     其他开发者使用。

    1. 如果在混合操作系统环境中工作,则存在一些有问题的咕噜声 - 应该谨慎检查的软件包,例如grunt-imagemin,它可以阻止Windows上的检查,使用msysgit,因为它们的路径很长。 Filename too long in git for windows
    2. 我发现最好将我的工作流自动化和相应的npm包放入其自己的子文件夹/存储库中,以实现可重用性和更好的项目维护 - 因为它使自动化模块不会与实际的nodejs应用程序包混合。