使用ts-node导入ESM模块报错,求解决方案
解决ES模块包在ts-node中的导入问题
你的问题根源是search-integrator是纯ES模块(使用import语法),而ts-node默认采用CommonJS加载逻辑,导致模块加载机制冲突。以下是几种可行的解决方法:
方法一:正确配置ts-node的ESM模式
需要同步调整几个配置项:
- 项目根目录创建/修改
tsconfig.json:
{ "compilerOptions": { "module": "ESNext", "moduleResolution": "NodeNext", "target": "ES2020", "esModuleInterop": true }, "ts-node": { "esm": true } }
- 在
package.json中添加"type": "module"(如果没有的话):
{ "type": "module" }
- 修改TS脚本的导入路径,补充
.js后缀(ES模块解析要求显式文件后缀):
// my-script.ts import SearchIntegrator from "search-integrator/src/main/search-integrator.js" console.log(SearchIntegrator)
- 最后运行命令:
ts-node my-script.ts
方法二:用tsx替代ts-node
tsx对ES模块和TypeScript的兼容性更好,无需复杂配置:
- 全局安装tsx:
npm install -g tsx
- 直接运行脚本:
tsx my-script.ts
方法三:先编译TS再用Node执行
如果不想调整运行工具,也可以先编译再运行:
- 配置
tsconfig.json(同方法一的compilerOptions),执行编译:
tsc my-script.ts
- 用Node运行编译后的JS文件:
node my-script.js
内容的提问来源于stack exchange,提问作者kraftwer1
相关产品推荐
相关产品推荐

