Typescript:esnext 编译器选项会破坏从外部库导入的 es6
Posted
技术标签:
【中文标题】Typescript:esnext 编译器选项会破坏从外部库导入的 es6【英文标题】:Typescript: esnext compiler option destroys es6 import from external lib 【发布时间】:2019-12-14 10:05:58 【问题描述】:当将编译器选项的 module
或 target
属性设置为 esnext 时(id 喜欢使用 import("example")
语句),es6 import 语句将停止为 npm install
ed 库工作(本地模块仍然可以工作:例如"./test.ts"
)。
所以这个import * as asd from "testmodule";
抛出cannot find module 'testmodule'
。然而,省略这两个属性使其工作。为什么这是以及我应该使用什么 es 标准来保留 import("example")
和 import * as asd from "testmodule";
语句?
这是我的完整 tsconfig.json:
"compilerOptions":
"outDir": "./dist/",
"module": "esnext",
"target": "esnext",
"allowJs": true,
"sourceMap": true
【问题讨论】:
【参考方案1】:TLDR:当"module"
是除"commonjs"
之外的任何内容时,您需要明确指定"moduleResolution"
的值"node"
才能正常工作。指定 "commonjs"
会隐式执行此操作。
我强烈建议您始终明确指定输出模块格式。
此外,尽管有某些选项的名称,"target"
和 "module"
是独立且正交的。它们的含义非常不同,不能混淆。
"compilerOptions":
"outDir": "./dist/",
"module": "esnext",
"moduleResolution": "node",
"target": "esnext", // this isn't relevant
"allowJs": true,
"sourceMap": true
"commonjs"
是一种输出 模块格式。 ESNext import(...)
语句被转译成输出模块格式,就像其他模块语法如 ES2015 import
和 export
语句一样。
当你指定 --module esnext
时,你是在告诉 TypeScript 根本不要转译任何模块语法。这就是--module
的重点,它指定了输出模块格式,而不是源模块格式。
【讨论】:
我知道已经很晚了,但你还记得你从哪里得到的吗?感谢您的解释,我已经用我的代码解决了同样的问题 我从哪里得到什么?以上是关于Typescript:esnext 编译器选项会破坏从外部库导入的 es6的主要内容,如果未能解决你的问题,请参考以下文章
仅当“模块”选项设置为“esnext”时才允许使用***“等待”表达式
将 typescript 错误连接到其关联的编译器选项 (tsconfig.json)
将 Typescript 的 baseUrl 编译器选项与节点一起使用