使用Grunt + Git

时间:2017-07-21 08:47:59

标签: javascript git sass gruntjs

很抱歉,我无法定义能够提出问题的标题。但我会在这里解释我的问题:

我们在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

Git会忽略dist下的所有文件。

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

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

我想到的唯一解决方案是将已编译的CSS和JavaScript文件添加到Git中。但是,我们将不得不在这些文件中解决合并冲突。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

增量更新

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

    1. HEAD
    2. 的帮助下,将git-archive结帐到临时目录中
    3. 使用grunt
    4. 构建项目
    5. 借助targzip将所有项目文件存储到存档中,忽略src个文件夹中的所有文件
    6. 使用git-diff --no-index确实可以挽救生命,因为diffrsync都无法按照我需要的方式报告更改。