gulp版本过高带来的问题 今天学习gulp,在使用gulp命令进行打包压缩的时候,terminal提示如下错误(第一个问题):
AssertionError: Task function must be specified
查资料找到原因:gulp版本过高,可先通过gulp -v对gulp版本查询,我项目中(package.json)的gulp版本是4.0.0;
先说解决办法,后面说原因: 把package.json中的gulp版本改成4.0以下,如3.9.1,更改完以后在terminal中重新安装:
npm install
这样就解决了第一个问题。
造成一开始提示错误的原因:gulp 3与gulp 4的不同,举个栗子:在gulp 3中,现有A,B,C列表,如果想在一个序列中运行,由于gulp是异步处理机制,可能造成一个问题:把一个文件转换到指定文件夹时,当此文件质量过大,可能还没有转换完全,此文件夹就被gulp打包压缩了,此为 依赖的问题 ;为解决此问题可以在gulpfile.js文件中的gulp.task中添加一个参数:[‘依赖文件名’],如下:
gulp.task("a" , function{
//任务代码
});
gulp.task("b" , ['a'] , function{
//任务代码
});
gulp.task("c" , ['b'] ,function{
//任务代码
});
即执行任务b的时候要在已经完成a的基础上,执行任务c要在已经完成b的基础上;这样就解决了依赖的问题;
BUT,如上操作在gulp4中是不正确的,不想使用Gulp3的方式指定依赖任务,你需要使用gulp.series和gulp.parallel,因为gulp任务现在只有两个参数
gulp.series:按照顺序执行
gulp.paralle:可以并行计算
这里就不再细说gulp4的解决办法,详情可以参考这位大佬的博客:
再次运行的时候又出现一个错误的提示(第二个问题):
ReferenceError:primordials is not defined
造成问题原因:gulp版本v3.9.x,node版本v12.xx版本时,会出现安装gulp使用不了插件的问题,此问题为gulp版本和node版本不兼容。
解决办法:
- gulp升级到4.0以上(这与第一个问题冲突,不推荐)
- node降级11.xx(亦不推荐)
- 将graceful-fs升级到在node v12+版本下也可工作的版本4.2.2(推荐)
对于第3点:在package.json同级目录下(项目根目录下)新建文件npm-shrinkwrap.json,输入以下内容:
{
"dependencies": {
"graceful-fs": {
"version": "4.2.2"
}
}
}
这样就把第二个问题解决了。
查找资料过程中,感谢这两位大佬的博客帮助: