我正在尝试使用
ts-node
命令运行此脚本:
// my-script.ts
import SearchIntegrator from "search-integrator/src/main/search-integrator"
console.log(SearchIntegrator)
但是 SearchIntegrator NPM 包似乎在内部使用
import
语句:
// search-integrator.js
import Parser from "./backend/parser/parser.js";
// …
...导致此错误的原因:
$ ts-node my-script.ts
Error [ERR_REQUIRE_ESM]: require() of ES Module /node_modules/search-integrator/src/main/search-integrator.js from my-script.ts not supported.
过去几个小时我尝试了在网上找到的各种配置选项组合。例如:
{
"ts-node": {
"esm": true
}
}
…或者
{
"ts-node": {
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": true
}
}
}
…甚至
"moduleResolution": "node"
。
但是,它唯一影响的是错误消息,例如
Uncaught SyntaxError: Cannot use import statement outside a module" when importing ECMAScript 6
。
我尝试的选项越多,我理解的就越少。我真的只是想
import
那个我对代码没有影响的NPM模块。
如果
ts-node
不是可行的方法,我也愿意使用其他工具。
我正在使用最新的 LTS Node (v18) 和最新版本的 ts-node (v10)。
为了简单起见,我删除了
tsconfig.json
和 package.json
并通过将 my-script.ts
重命名为 my-script.mts
并使用以下命令运行它来使其工作:
npx ts-node --esm --compilerOptions '{ "module": "esnext" }' my-script.mts