javascript - 仅当 src 发生更改时才运行构建

故事:

我们有一个测试人员团队致力于使用 Protractor 为我们的内部 AngularJS 应用程序自动化端到端测试。以下是他们通常为“本地”测试运行的任务:

grunt.registerTask('e2e:local', [
    'build:prod',
    'connect:test',
    'protractor:local'
]);

它运行“构建”任务,启动网络服务器并针对本地构建运行 e2e 测试。

build:prod 任务本身定义为:

grunt.registerTask(
    'build:prod', [
        'clean',
        'copy:all',
        'copy:assets',
        'wiredep',
        'ngtemplates',
        'useminPrepare',
        'concat',
        'ngAnnotate',
        'autoprefixer',
        'uglify',
        'cssmin',
        'copy:cssfix',
        'usemin',
        'copy:html',
        'bowercopy',
        'template:setProdVersion'
    ]
);

这里我们有很多子任务(肯定可以改进,但现在看起来是这样)。

问题:

目前,构建完成大约需要 25 秒。而且,每次有人运行端到端测试时,都会执行构建任务。

问题:

只有在 src 目录发生变化的情况下,如何才能运行 build:prod 任务?


请注意,这里的要求是使其对运行测试的测试人员透明。我不希望他们记住什么时候需要执行构建,什么时候不需要。

换句话说,这个过程应该是自动化的。目标是自动检测是否需要构建。

请注意,理想情况下,我希望将构建任务保持原样,这样如果直接通过 grunt build:prod 调用它,它将重新构建,而不管先前构建的日期戳。


想法和尝试:

  • 有密切相关的grunt-newer package ,但是,由于我们有一个相当复杂的构建,一开始有一个 clean 任务,我不确定如何在我的情况下应用它

  • 我还在考虑的是,在 e2e:local 任务中,手动检查 distsrc 中文件的时间戳 并据此决定是否需要调用 build:prod。我认为这就是 grunt-newer 在内部做的事情

  • 我们开始使用jit-grunt这有助于提高性能

最佳答案

如果你使用 git,这里有一个想法:

使用 grunt-gitinfo 之类的东西怎么样?并使用 HEAD 中的最后一次提交作为基础?

想法是:

  • 您创建一个新的 grunt 任务来检查最新的提交哈希
  • 您可以将此提交哈希保存在添加到 gitignore 的文件中(并且不在 clean 文件夹中,通常可以在 repo 的根目录中)
  • 在保存到文件之前,它会检查其中已经存在的值(标准节点 fs 模块可以轻松地进行读/写)
  • 如果哈希不匹配,运行 build:prod 任务然后保存新的提交哈希
  • 测试人员的构建将取决于您的新任务,而不是直接 build:prod

另一种选择(仍在使用 git):

您可以使用 grunt-githooks 之类的内容并创建一个在 pull 之后运行并调用 git build:prod 的 git 钩子(Hook),然后您可以将其从测试人员运行的 grunt 任务的依赖项中删除。

你可能有另一个代码来检查 gitook 并在需要时安装它,这对于测试人员来说可能是一次性的额外步骤,或者可能融入他们调用的 grunt 任务中。

https://stackoverflow.com/questions/31192065/

相关文章:

visual-c++ - 在 Windows 8 上为 Visual Studio 2012 构建

shell - 在 jenkins 中运行命令 shell

c++ - 在构建我的 C++ 可执行文件 (gcc) 时,我可以获得所有链接库的报告吗? (包括静

rest - Sonatype Nexus REST Api 获取最新的构建版本

optimization - Jekyll 编译似乎太慢了

.net - 构建后的 MsBuild 复制文件

visual-studio - TFS 构建损坏 - 源目录上的目录不为空

build - apktool 构建 apk 失败

android - Xamarin.Android 构建/部署非常缓慢。如何加快他们的速度?

c# - Visual Studio : How to properly build and spe