使用 Grunt + Git 为 JavaScript 项目构建增量更新的工作流

Workflow for building incremental updates for a JavaScript project with Grunt + Git

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

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

Sass 和 JavaScript 源位于多个文件夹中(每个 app-module 一个),文件夹结构如下:

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-09-19更新: 我已将标题更改为更准确,因为我正在搜索的是一个在使用 Grunt 和 Git.

的 JavaScript-project 上构建增量更新的工作流

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

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

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

增量更新

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

全部更新

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

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