Typescript编译正常但ts-node-dev运行fs-xattr报ERR_REQUIRE_ESM如何解决
问题解决方法
核心原因
fs-xattr@0.4.0 是纯ESM规范的包,tsc 编译时会遵循你package.json中"type":"module"的配置输出ESM格式代码,所以直接用Node运行正常;但ts-node-dev默认走CommonJS加载逻辑,无法直接引入ESM包,因此抛出错误。
具体修改步骤
- 调整
tsconfig.json配置
补充module字段,并添加ts-node专属配置开启ESM支持,修改后完整内容如下:
{ "compilerOptions": { "lib": ["es2020"], "target": "es2020", "module": "ESNext", "moduleResolution": "Node", "strict": true, "esModuleInterop": true }, "ts-node": { "esm": true, "experimentalSpecifierResolution": "node" } }
- 修改
package.json中的dev启动脚本
给ts-node-dev添加--esm参数,适配ESM加载逻辑:
"scripts": { "dev": "ts-node-dev --esm index.ts", "build": "tsc" }
- 可选优化
如果修改后仍然报错,可将Node版本升级到16.x及以上的LTS版本,Node 14对ESM的支持还处于实验阶段,高版本Node的ESM兼容逻辑更稳定。
修改完成后重新执行npm run dev即可正常运行,和tsc编译后的运行表现完全一致。
内容的提问来源于stack exchange,提问作者shiznatix
相关产品推荐
相关产品推荐

