我已经通过“npm install”安装了Node.js模块,然后尝试在命令提示符下执行gulp sass watch。之后,我得到了以下回应。
[18:18:32] Requiring external module babel-register
fs.js:27
const { Math, Object, Reflect } = primordials;
^
ReferenceError: primordials is not defined
我在大口大口看之前已经试过了:
npm -g install gulp-cli
这个错误是因为Node.js的新版本(12)和Gulp的旧版本(少于4)。
不建议降级Node.js和其他依赖项。我通过更新package.json文件,获取所有依赖项的最新版本来解决这个问题。为此,我使用npm检查更新。它是一个用所有依赖项的最新版本更新package.json的模块。
参考:https://www.npmjs.com/package/npm-check-updates
npm i -g npm-check-updates
ncu -u
npm install
在大多数情况下,我们必须更新gulpfile.js,如下所示:
参考:Gulp 4:新的任务执行系统-Gulp.parallel和gull.series,Migration
之前:
gulp.task(
'sass', function () {
return gulp.src([sourcePath + '/sass/**/*.scss', "!" + sourcePath + "/sass/**/_*.scss"])
....
}
);
Other configuration...
gulp.task(
'watch', function () {
gulp.watch(sourcePath + '/sass/**/*.scss', ['sass']);
}
);
之后:
gulp.task('sass', gulp.series(function(done) {
return gulp.src([sourcePath + '/sass/**/*.scss', "!" + sourcePath + "/sass/**/_*.scss"])
...
done();
}));
Other config...
gulp.task(
'watch', function () {
gulp.watch(sourcePath + '/sass/**/*.scss', gulp.series('sass'));
}
);
如果在使用最新的gulp^4.0时保持Node.js v12,请执行以下步骤:
使用以下命令更新命令行界面(仅供预防):
npm i gulp-cli -g
添加/更新package.json文件的gulpunderdependencies部分
"dependencies": {
"gulp": "^4.0.0"
}
删除package-lock.json文件。
删除node_modules文件夹。
最后,运行npm i升级并重新创建一个全新的node_modules文件夹和package-lock.json文件,其中包含Gulp^4.0的正确参数:
npm i
注意,Gulp.js 4.0引入了series()和parallel()方法来组合任务,而不是Gulp 3中使用的数组方法,因此您可能会或可能不会在旧的gulpfile.js脚本中遇到错误。
为了了解更多关于应用这些新功能的信息,本网站对其做了充分的介绍:如何迁移到Gulp.js 4.0
我已经尝试了很多建议来解决我的Windows 10机器上的现有项目的这个问题,并最终按照这些步骤来解决它;
从“添加或删除程序”中卸载Node.js。启动一个新的命令提示符,键入gulp-v,然后键入node-v,以检查它是否已完全卸载。下载并安装Node.js v10.16.0-不是最新的,因为据我所见,最新的Node&gump组合导致了问题。在安装过程中,我没有像往常一样更改安装路径(C:\Program Files\nodejs)。打开一个新的命令提示符,转到项目的目录,在该目录中获得gulpfile.js,然后开始gulph,如图所示。
请注意,有时当我在git分支之间切换时,我可能需要关闭Visual Studio并再次以管理员身份运行它,以便看到此解决方案再次运行。
据我所知,在我为新项目安装了Node.js的最新推荐版本(12.18.4)后,这个问题就开始出现了,我只是在现有web项目上没有反映某些FE更改时才意识到这一点。
更新:今天,我在新电脑上设置一个现有项目时遇到了同样的问题,我做了同样的步骤+转到我有gulf文件的目录,然后运行npm安装。