javascript – Gulp有2个任务相互冲突
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Gulp有2个任务相互冲突,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2664字,纯文字阅读大概需要4分钟。
内容图文
我有javascript和css文件,我使用gulp-rev lib [1]的分叉回购,它们都重命名文件并更新html文件中的文件引用.
不幸的是,两个任务之间存在争用条件,导致样式表引用md5命名文件或js文件获胜.
我试图使用promises和回调(见下文)来允许同步任务,但从来都不是css和js md5引用.
sindresorhus的lib只重命名文件并且不修复链接,所以是否有更好的方法来修复html链接,或者使用forked插件他们的方式去(有一些我缺少的修复)?
gulp.task('rev', ['rev-js'] );
gulp.task('rev-js', ['rev-css'], function(cb) {
var context = rev.Context();
gulp.src(['./build/public/js/woddy.js', './build/public/js/angular.js', './build/public/js/components.js'])
.pipe(rev(context))
.pipe(gulp.dest('./build/public/js'));
gulp.src('./build/public/app.html')
.pipe(context.replace(/src="js\/(\w+\.js)"/g, 'src="js/{{$1}}"'))
.pipe(gulp.dest('./build/public'));
});
gulp.task('rev-css', function() {
var context = rev.Context();
gulp.src('./build/public/styles/woddy.css')
.pipe(rev(context))
.pipe(gulp.dest('./build/public/styles'));
gulp.src('./build/public/app.html')
.pipe(context.replace(/href="styles\/(\w+\.css)"/g, 'href="styles/{{$1}}"'))
.pipe(gulp.dest('./build/public'));
});
> https://github.com/dtinth/gulp-rev
解决方法:
几乎所有gulp中的操作都是异步的,这意味着你需要使用3 supported methods for notifying when a task is complete中的一个.(如果任务是真正同步的,你不需要做任何事情.)
>从方法返回流(通常最简单)
>回报承诺(gulp很少见)
>使用提供给任务功能的回调方法.
首先,你在rev-js方法中得到了回调参数.通过包含变量(cb),但从不使用它,该任务将永远不会“完成”,因此rev将等待它.
其次,你在每个任务中都有两组流,它们同时运行 – 而不是像你想象的那样一个接一个地运行.例如,在rev-js中,启动js任务,然后启动html任务,然后可以按任何顺序处理和完成.最有可能的是,HTML任务将在处理完所有JS文件之前完成.
就个人而言,我将拆分HTML任务并使用其中一个现有插件(例如gulp-inject,这很简单),然后单独处理.
因此,对于这种情况,您的文件将如下所示
gulp.task('rev', ['rev-html'] );
gulp.task('rev-html', ['rev-js', 'rev-css'], function() {
// change to reference specific JS and CSS files as necessary
return gulp.src(['./build/public/**/*.*', '!./build/public/index.html'])
.pipe(inject('index.html'))
.pipe(gulp.dest('./build/public'));
});
gulp.task('rev-js', function() { // NOTE: no `cb` here
var context = rev.Context();
return gulp.src(['./build/public/js/woddy.js', './build/public/js/angular.js', './build/public/js/components.js'])
.pipe(rev(context))
.pipe(gulp.dest('./build/public/js'));
});
gulp.task('rev-css', function() {
var context = rev.Context();
return gulp.src('./build/public/styles/woddy.css')
.pipe(rev(context))
.pipe(gulp.dest('./build/public/styles'));
});
现在,如果您真的想手动处理注入,那么您应该使用stream combiner并返回该流的结果.但是你仍然需要在HTML步骤之前完成JS步骤.
内容总结
以上是互联网集市为您收集整理的javascript – Gulp有2个任务相互冲突全部内容,希望文章能够帮你解决javascript – Gulp有2个任务相互冲突所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。