自学是痛苦的一件事,最近自学gulp的前端自动化构建,按照示例代码,对本地CSS代码进行压缩,源代码如下:
gulpfile.js 文件:
// less 语法转换
// css 代码压缩
gulp.task('cssmin', () => {
gulp.old-src(['./old-src/css/.less', './old-src/css/.css'])
.pipe(less())
.pipe(csso())
.pipe(gulp.dest('dist/css'));
});
提示信息如下:
[01:46:43] The following tasks did not complete: cssmin
[01:46:43] Did you forget to signal async completion?
翻译过来,也就是:
以下任务没有完成:cssmin
你忘记发送异步完成信号了吗?
截图如下:
![]()
虽然冒红报错了,但是并不影响执行.....但是抱着 解决问题的心态,我还是查阅了大量资料。
查阅资料后,有很多解决办法,但从根本看,应该还是 gulp 版本的问题, gulp 4- 版本 相对于gulp 3- 版本, 更加规范化。
这里只列举两个常用的解决办法。
解决方法一:
加 return 返回。因为task()方法 参数是回调函数,回调函数就应该有个 return 返回。
这应该就是为什么 gulp 3- 不加return不报错,但是 gulp 4- 版本报错的原因,因为更加规范化。
gulp.task('cssmin', () => {
return gulp.old-src(['./old-src/css/*.less', './old-src/css/*.css'])
.pipe(less())
.pipe(csso())
.pipe(gulp.dest('dist/css'));
});
解决方法二:
说是官方提供方法。但是我确实没查到在哪规范的。
在不使用文件流的情况下,向task的函数里传入一个名叫done的回调函数,以结束task(),如下代码所示:
gulp.task('cssmin', done => {
gulp.old-src(['./old-src/css/*.less', './old-src/css/*.css'])
.pipe(less())
.pipe(csso())
.pipe(gulp.dest('dist/css'));<br></br> done();
});
可能有人就会问,既然第一种方法,那么方便,为什么还要说第二种方法,因为在自学的 过程中,我还遇到其他问题。如下:
我在task 中,写了两个gulp.old-src 拷贝处理任务,如果用 return,我该返回哪个?我在不知道怎么写的的情况下,就直接采用了 方法二,顺利解决。
// 网站其他文件拷贝
gulp.task('copy', done => {
gulp.old-src('./old-src/images/*')
.pipe(gulp.dest('dist/images'));
gulp.old-src('./old-src/lib/*')
.pipe(gulp.dest('dist/lib'));
done();
});
done回调函数的作用是在task完成时通知gulp(而不是返回一个流)
by不言谢
声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。
本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。
我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。
微信扫码关注 HaowuliaoA 订阅号