Node Modules导入报错:gulp调用globby触发ERR_REQUIRE_ESM问题求助
问题描述
错误输出
PS C:\Users\Us1\MyProject\src\Project.web> npm run create-bundles > projectweb@1.0.0 create-bundles > gulp buildDev Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\Us1\MyProject\src\Project.web\node_modules\globby\index.js from C:\Users\Us1\MyProject\src\Project.web\gulpfile.js not supported. Instead change the require of index.js in C:\Users\Us1\MyProject\src\Project.web\gulpfile.js to a dynamic import() which is available in all CommonJS modules. at Object.<anonymous> (C:\Users\Us1\MyProject\src\Project.web\gulpfile.js:5:14) { code: 'ERR_REQUIRE_ESM' }
命令create-bundles用于执行gulp buildDev,为开发环境构建依赖资源。
环境信息
npm -v: 9.6.2node -v: v18.15.0gulp -v: CLI version 2.3.0,Local version 4.0.2(已升级)yarn -v: 1.22.19- 系统环境:x64位Windows 11企业版虚拟机,安装有Visual Studio Enterprise 2022
已尝试的无效操作
- 知识库调研:在技术社区搜索解决方案,未找到匹配当前版本组合的有效方案,尝试切换Node版本的建议未解决问题。
- 查找版本兼容矩阵:未找到Gulp或Node官方提供的明确版本兼容矩阵。
- 切换Yarn并升级Gulp:将本地Gulp升级至4.0.2后,执行命令仍报错。
- 生成npm-shrinkwrap.json锁定依赖:仅锁定
graceful-fs版本,无效果。 - 清理缓存重新执行:清理npm缓存后重新运行命令,问题依旧。
解决方案
方案1:降级globby到CommonJS兼容版本
当前报错核心是globby从v12版本起改为纯ESM模块,而你的gulpfile.js是CommonJS格式,无法用require()加载ESM模块。直接降级globby到支持CommonJS的最高版本(v11.x)即可:
- 在项目
package.json中添加/修改依赖:
"dependencies": { "globby": "^11.1.0" }
- 删除
node_modules文件夹和package-lock.json/yarn.lock文件 - 重新安装依赖:
npm install # 或使用Yarn yarn install
方案2:修改gulpfile.js使用动态import
如果不想降级依赖,可将gulpfile.js中对globby的require改为异步动态导入(CommonJS模块支持该语法):
原代码(约第5行):
const globby = require('globby');
修改为:
async function getTargetFiles() { const { default: globby } = await import('globby'); return globby(['你的文件匹配规则']); } // 对应调整gulp任务为异步函数 gulp.task('buildDev', async function() { const files = await getTargetFiles(); // 后续任务逻辑 });
方案3:将gulpfile转为ESM格式
- 将
gulpfile.js重命名为gulpfile.mjs - 替换所有
require为import语法,例如:
import gulp from 'gulp'; import globby from 'globby';
- 在项目根目录
package.json中添加:
"type": "module"
注意:此方案需确保所有依赖均支持ESM格式,若有旧版Gulp插件不兼容,需同步升级插件。
内容的提问来源于stack exchange,提问作者Beegee
相关产品推荐
相关产品推荐

