【问题标题】:gulp-useref does not work with gulp-mergegulp-useref 不适用于 gulp-merge
【发布时间】:2017-12-13 15:18:09
【问题描述】:

情况:我有以下 Gulp 脚本,它应该将我的所有 html 文件构建到 distFolder。此外,它应该通过解析 index.html 中的链接来构建外部脚本文件——这是 useref 的优点。 我不确定这是否是理想的方法 - 但我需要拆分 html 文件 - 如果我放入多个 html 文件,我会遇到与 cleanCSS() 和 uglify() 的写入冲突。

// Parse the html file and create external scripts
gulp.task('htmlscripts', function() {
    var s1 = gulp.src(['*.html', '!index.html'])
        .pipe(useref({noAssets: true}))
        .pipe(gulp.dest(distFolder));
    var s2 = gulp.src('index.html')
        .pipe(useref())
        .pipe(cache('useref'))
        .pipe(gulpif('*.js', uglify()))
        .pipe(gulpif('*.css', cleanCSS()))
        .pipe(gulp.dest(distFolder));
    return merge(s1, s2);
});

// Minify 
gulp.task('htmlmin', ['htmlscripts'], function() {
    return ...
});

gulp.task('default', ['htmlscripts', 'htmlmin']);

问题:第二个任务 (htmlmin) 从未加载。看来,第一个任务(htmlscripts)没有在承诺中返回有效的结尾。 (依赖问题)

如果我删除了这两项任务中的一项,另一项将正确完成。

我做了以下测试:

不工作(htmlmin 任务未启动):

gulp.task('htmlscripts', function() {
    var s1 = gulp....
    var s2 = gulp....
    return merge(s1,s2);
});

工作中(我的意思是至少运行了 htmlmin 脚本):

gulp.task('htmlscripts', function() {
    var s1 = gulp....
    var s2 = gulp....
    return merge(s1);
});

不工作(htmlmin 任务未启动):

gulp.task('htmlscripts', function() {
    var s1 = gulp....
    var s2 = gulp....
    return merge(s2); // this one is really strange, isn't it? (see next test)
});

工作中(我的意思是至少运行了 htmlmin 脚本):

gulp.task('htmlscripts', function() {
    // var s1 = gulp....
    var s2 = gulp....
    return merge(s2);
});

【问题讨论】:

  • 你为什么将htmlscripts 作为htmlmindefault 任务的依赖项?这不会造成问题吗?对htmlmin 的依赖就足够了。
  • @lofihelsinki:你的意思是在最后一行?这是我的开始任务(当我运行 >gulp 时)。我想我必须在这里列出我所有的任务,不是吗?
  • 不,如果 htmlscripts 已经是 htmlmin 中的依赖项,则每次运行 htmlmin 时都会运行它。因此,您应该将其从 default 任务中删除。
  • 好的,所以当我使用 gulp 时,我只启动最后一个任务,并且每个任务都有前一个任务作为依赖项?我从来没有读过... - 我会尝试!
  • 您也可以将htmlmin 的依赖关系放在一起,只将htmlscriptshtmlmin 作为default 任务的依赖关系。但是没有理由在两个地方有htmlscripts

标签: gulp gulp-useref gulp-merge


【解决方案1】:

你在用gulp-cached吗?

有没有可能,您在s2 中的资源在缓存中找到了?因此.pipe(cache('useref')) 不会转发文件,s2 将是null

使用gulp-cached,如果在缓存中找到资源,它不会转发缓存的资源。它什么也不通过,即停止。因此s2 将为空。

我会尝试删除.pipe(cache('useref')) 看看它是否有效?

【讨论】:

  • 根据您的建议,我已删除 gulp-cache,但没有帮助。几个星期和多次重新启动后,我再次尝试,现在它可以正常工作了。 gulp-cache 似乎是一个危险的工具 ;-)
猜你喜欢
  • 1970-01-01
  • 2016-12-24
  • 2017-12-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多