运行GitHub agar.io克隆项目报Gulp ERR_ASSERTION错误如何解决?
问题原因
你遇到的AssertionError [ERR_ASSERTION]: Task function must be specified报错核心是Gulp版本不兼容。你使用的这个开源项目的gulpfile是基于Gulp 3.x语法编写的,但你本地当前安装的是Gulp 4.x版本,两个大版本的任务定义、依赖声明API完全不兼容,且你执行了npm audit --force会强制跳过版本校验升级依赖,直接把原本适配的低版本Gulp升到了4.x,所以执行启动命令会报错。
解决方案
方案一:降级Gulp版本(推荐,无需修改业务代码)
- 删除项目根目录下的
node_modules文件夹、package-lock.json文件 - 打开
package.json文件,找到devDependencies配置项中的gulp字段,将版本号修改为^3.9.1 - 执行
npm install命令重新安装所有依赖 - 依赖安装完成后执行
npm start即可正常启动项目
方案二:修改gulpfile适配Gulp 4.x(保留高版本Gulp)
将原gulpfile中所有数组形式的任务依赖声明,根据执行逻辑替换为gulp.series()(串行执行依赖任务)或gulp.parallel()(并行执行依赖任务),核心修改示例如下:
- 原无执行逻辑的依赖聚合任务
gulp.task('build', ['build-client', 'build-server', 'test']);
修改后:
gulp.task('build', gulp.parallel('build-client', 'build-server', 'test'));
- 原带前置依赖的任务
gulp.task('test', ['lint'], function () { gulp.src(['test/**/*.js']) .pipe(mocha()); });
修改后:
gulp.task('test', gulp.series('lint', function () { gulp.src(['test/**/*.js']) .pipe(mocha()); }));
- 原watch监听配置
gulp.watch(['src/client/**/*.*'], ['build-client', 'move-client']);
修改后:
gulp.watch(['src/client/**/*.*'], gulp.series('build-client', 'move-client'));
所有带数组依赖的task和watch配置全部按上述规则修改完成后,执行npm start即可正常运行。
注意事项
这类多年未迭代的开源项目不要随意执行npm audit --force强制升级依赖,该操作会跳过版本兼容性校验直接升级依赖,极易出现类似的语法不兼容问题,按项目自带的lock文件安装指定版本依赖即可。
内容的提问来源于stack exchange,提问作者Mike Osborn
相关产品推荐
相关产品推荐

