Gulp 抛出错误"必须使用导入来加载 ES 模块"



我们将节点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。

最新更新