【问题标题】:Workflow for building incremental updates for a JavaScript project with Grunt + Git使用 Grunt + Git 为 JavaScript 项目构建增量更新的工作流程
【发布时间】:2017-12-27 05:47:26
【问题描述】:

很抱歉,我无法定义一个标题来让我的问题更明确。但我会尝试在这里解释我的问题:

我们在 JavaScript 项目中使用 Grunt 将 Sass 文件编译为 CSS 并浏览和缩小我们的 JavaScript 模块。

Sass 和 JavaScript 源代码位于多个文件夹中(每个应用模块一个),文件夹结构如下:

src/
    styles/
        base.scss
        style.scss
    js/
        module1.js
        module2.js
        app.js

Grunt 任务将这个文件编译成这个结构:

dist/
    styles/
        style.css
    js/
        app.js

dist 下的所有文件都被 Git 忽略。

当我们部署我们的应用程序时,我们会创建增量更新,这基本上是 git diff --name-only 以获取已更改文件的列表。

我的问题来了:当我部署应用程序时,我必须构建所有的 JavaScript 和 Sass 文件。由于编译的文件在 Git 之外,我不知道这些文件中的哪些已更改(与最新版本相比)。

我想到的唯一解决方案是将编译后的 CSS 和 JavaScript 文件也添加到 Git。但随后我们将不得不与这些文件中的合并冲突作斗争。

对如何优化此工作流程有任何想法或经验?

2017 年 9 月 19 日更新: 我已将标题更改为更准确,因为我正在搜索的是在使用 Grunt 和 Git 的 JavaScript 项目上构建增量更新的工作流程。

【问题讨论】:

    标签: javascript git sass gruntjs


    【解决方案1】:

    您不应该将已编译的文件保存在您的存储库中 - 这样做没有任何意义。它只会导致合并冲突并在提交历史记录中造成混乱。您应该跟踪所有必要的源代码和配置文件,以便任何人都可以从历史的任何时间点轻松构建。如果你这样做,那么你的问题归结为

    git checkout newVersion
    <build>
    git checkout oldVersion
    <build>
    diff newBuild oldBuild
    

    【讨论】:

    • 是的,你是对的。我完全忘记了传统的diff。谢谢!
    • 看起来 rsync 在自动化环境中会做得更好。
    • 根据您的回答,我已经用我现在完成的工作流程回答了我自己的问题;-)
    【解决方案2】:

    根据@Dunno 的回答,现在创建更新的工作流程如下:

    增量更新

    1. git-archive 的帮助下将HEAD 签出到临时目录中
    2. 使用grunt 构建项目
    3. git-archive 的帮助下将HEAD (HEAD^) 之前的提交检出到临时目录中
    4. 使用grunt 构建项目
    5. git-diff --no-index 的帮助下比较两个目录(它允许在没有索引的情况下比较目录中的文件)
    6. targzip 的帮助下将这些差异存储到存档中,忽略src 文件夹中的所有文件

    完整更新

    1. git-archive 的帮助下将HEAD 签入临时目录
    2. 使用grunt 构建项目
    3. targzip 的帮助下将所有项目文件存储到存档中,忽略src 文件夹中的所有文件

    git-diff --no-index 的使用确实是救命稻草,因为 diffrsync 都无法以我需要的方式报告更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 2014-02-14
      • 2014-12-28
      • 1970-01-01
      • 2015-02-05
      相关资源
      最近更新 更多