ES6导入rimraf模块为函数报错:ReferenceError: rimraf未定义求助
解决rimraf ES6导入后调用报错的问题
看起来你在把CommonJS风格的rimraf调用转为ES6语法时踩了模块导入的坑,我来帮你梳理清楚问题根源和解决办法:
第一步:确认你的环境是否支持ES模块
Node.js默认采用CommonJS模块系统,如果你直接在普通.js文件里使用import语法,Node会把它当作CommonJS模块处理,这时候导入的模块结构会和预期不符,直接调用就会报错。要解决这个,你需要让Node识别你的文件为ES模块:
- 在项目根目录的
package.json中添加"type": "module"字段; - 或者把你的脚本文件扩展名改为
.mjs(Node会自动将.mjs文件识别为ES模块)。
第二步:使用正确的导入写法
rimraf的CommonJS导出是module.exports = rimraf(也就是导出了一个单一的函数),在ES模块体系中,这种导出会被映射为默认导出。所以正确的导入代码应该是:
import rimraf from "rimraf";
设置好ES模块环境后,再调用rimraf(...)就不会出现ReferenceError了。
如果因为某些限制你无法修改package.json或文件扩展名,也可以用动态导入的方式获取默认导出:
// 注意:动态导入需要在async函数中使用 const { default: rimraf } = await import("rimraf"); rimraf(...);
为什么之前的写法会报错?
- 当你用
import * as rimraf from "rimraf"时,导入的是一个包含所有导出项的对象,rimraf函数实际在rimraf.default属性里,直接调用rimraf(...)相当于调用这个对象,自然会报错; - 而如果没配置ES模块环境,
import rimraf from "rimraf"会被Node当作CommonJS处理,此时导入的rimraf是一个包含default属性的对象,而非直接的函数,调用也会失败。
内容的提问来源于stack exchange,提问作者Zak
相关产品推荐
相关产品推荐

