【发布时间】:2021-08-27 13:36:35
【问题描述】:
我想在 NodeJS 应用程序中使用自 TypeScript 3.8 以来可用的顶级等待。
所以,下面的 TypeScript 代码:
import { getDoctorsPage } from "./utils/axios.provider";
const page = await getDoctorsPage("047", "1", "1");
console.log(page);
编译成这个 JavaScript 代码:
import { getDoctorsPage } from "./utils/axios.provider";
const page = await getDoctorsPage("047", "1", "1");
console.log(page);
//# sourceMappingURL=index.js.map
当我尝试在 WebStorm 中运行它时,出现以下错误:
(node:95053) ExperimentalWarning: The ESM module loader is experimental.
file:///Users/anatoly/Documents/git/maccabi-parser/dist/index.js:2
const page = await getDoctorsPage("047", "1", "1");
^^^^^
SyntaxError: Unexpected reserved word
at Loader.moduleStrategy (internal/modules/esm/translators.js:81:18)
at async link (internal/modules/esm/module_job.js:37:21)
最新的 NodeJS 0.13.* 支持吗?
我的tsconfig.json
{
"compilerOptions": {
"target": "es2020",
"module": "esnext",
"pretty": true,
"sourceMap": true,
"outDir": "dist",
"importHelpers": true,
"strict": true,
"moduleResolution": "node",
"esModuleInterop": true,
"rootDir": "src",
"noImplicitAny": false,
"strictNullChecks": false,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": true,
"noUnusedParameters": false,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"baseUrl": "./",
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"resolveJsonModule": true
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"dist"
]
}
并且 package.json 包含 "type": "module"
【问题讨论】:
-
如果你在 node 中使用这个,它不会工作。节点需要
module为commonjs。 -
我猜它不仅取决于 typescript 的版本,还取决于其他东西,如果你正在使用它,最好检查兼容性或 webpack,如果你需要传递 V8 标志
--js-flags="--harmony-top-level-await" -
@VPaul 你是对的。在我按如下方式运行它之后:
node -r dotenv/config --harmony-top-level-await --es-module-specifier-resolution=node dist/index.js它开始工作。我还需要添加另一个标志--es-module-specifier-resolution=node,否则它不适用于ERR_MODULE_NOT_FOUND。你想写一个答案,所以我将能够接受它。看起来这个问题可能会很受欢迎
标签: javascript node.js typescript top-level-await