gulp-useref 不适用于 gulp-merge
gulp-useref does not work with gulp-merge
情况: 我有以下 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) 并没有 return promise 的有效结束。 (依赖问题)
如果我删除了两项任务中的一项,另一项正确完成。
我做了以下测试:
不工作(html分钟任务未启动):
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);
});
不工作(html分钟任务未启动):
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);
});
您在使用 gulp-cached
吗?
莫非,你在s2
的资源在缓存中?因此 .pipe(cache('useref'))
不会转发文件并且 s2
将是 null
?
使用gulp-cached
,如果在缓存中找到资源,则不会转发缓存的资源。它什么也没通过,即它停止了。因此 s2
将为空。
我会尝试删除 .pipe(cache('useref'))
看看它是否有效?
情况: 我有以下 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) 并没有 return promise 的有效结束。 (依赖问题)
如果我删除了两项任务中的一项,另一项正确完成。
我做了以下测试:
不工作(html分钟任务未启动):
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);
});
不工作(html分钟任务未启动):
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);
});
您在使用 gulp-cached
吗?
莫非,你在s2
的资源在缓存中?因此 .pipe(cache('useref'))
不会转发文件并且 s2
将是 null
?
使用gulp-cached
,如果在缓存中找到资源,则不会转发缓存的资源。它什么也没通过,即它停止了。因此 s2
将为空。
我会尝试删除 .pipe(cache('useref'))
看看它是否有效?