我们将节点v13.8.0
中的gulpfile.js
转换为 ES6,如下所示:
import { src, dest, series, parallel, watch } from 'gulp'
import nodemon from 'gulp-nodemon' // normal nodemon does not display an error on app crash
import env from 'gulp-env'
import browser from 'browser-sync'
import sass from 'gulp-sass'
// Tasks
export default {
cssTranspile: cssTranspile,
jsTranspile: jsTranspile,
server: series(startNodemon, startBrowserSync),
default: series(
parallel(
cssTranspile,
jsTranspile
),
startNodemon,
startBrowserSync,
function () {
watch('public/scss/*.scss', cssTranspile)
}
)
}
仅运行gulp
时报告的错误是:
internal/modules/cjs/loader.js:1160
throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath);
^
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: T:NodeICPgulpfile.js
require() of ES modules is not supported.
我一定是做错了什么。有人知道它可能是什么吗?
CLI version: 2.2.0
Local version: 4.0.2
标志"type": "module",
按照注释文档中的说明在package.json
中设置。该问题与geolib库中的此问题非常相似。
当我们按照此处所述将gulpfile.js
重命名为gulpfile.babel.js
时,我们会收到相同的错误。
package.json
包含以下包:
"devDependencies": {
"@babel/core": "^7.8.4",
"@babel/preset-env": "^7.8.4",
"@babel/register": "^7.8.3",
"exports-loader": "^0.7.0",
"gulp": "^4.0.2",
"gulp-env": "^0.4.0",
"gulp-nodemon": "^2.4.2",
"gulp-sass": "^4.0.2",
"nodemon": "^2.0.2"
},
"type": "module",
"babel": {
"presets": [
"@babel/env"
]
在回答我自己的问题时,当在package.json中设置标志"type": "module"
时,您不能使用gulp
。更多信息可以在这里找到。
现在这似乎已修复:https://github.com/gulpjs/gulp-cli/pull/214。请务必安装最新版本的gulp-cli
(截至 2020 年 6 月的 2.3.0(。
如果你的 package.json 指定了"type": "module"
你可以用 Gulp 任务gulpfile.js
命名你的 ES 模块,否则命名为gulpfile.mjs
。无需使用任何转译器或预加载器,如esm,Babel或TypeScript。