【问题标题】:Typescript: esnext compiler option destroys es6 import from external libTypescript:esnext 编译器选项会破坏从外部库导入的 es6
【发布时间】:2019-12-14 10:05:58
【问题描述】:

当将编译器选项的 moduletarget 属性设置为 esnext 时(id 喜欢使用 import("example") 语句),es6 import 语句将停止为 npm installed 库工作(本地模块仍然可以工作:例如"./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
  }
}

【问题讨论】:

    标签: typescript node-modules


    【解决方案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 importexport 语句一样。

    当你指定 --module esnext 时,你是在告诉 TypeScript 根本不要转译任何模块语法。这就是--module 的重点,它指定了输出模块格式,而不是源模块格式。

    【讨论】:

    • 我知道已经很晚了,但你还记得你从哪里得到的吗?感谢您的解释,我已经用我的代码解决了同样的问题
    • 我从哪里得到什么?
    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 2016-04-22
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多