【问题标题】:Typescript compilerOptions module & moduleResolution打字稿编译器选项模块和模块解析
【发布时间】:2022-01-05 23:53:37
【问题描述】:

我发现很多 tsconfig.json 样本总是有这样的compilerOptions

"module": "commonjs",
"moduleResolution": "node"

我觉得这样设置它们似乎没有必要,因为如果moduleResolutionnode,那么module 肯定是commonjsmodulecommonjsmoduleResolution 肯定也是node(我想不出任何其他情况)

不是这样吗?

---更新---

现在我意识到情况并非总是如此,因为 nodejs 完全支持 ES 模块,所以我可以使用 "module": "ES2020" & "moduleResolution": "node"(对于 nodejs 14+)但是当然如果我设置 "module":"commonjs" 我不需要设置 @ 987654334@

进一步参考What TypeScript configuration produces output closest to Node.js 14 capabilities?

【问题讨论】:

    标签: node.js typescript


    【解决方案1】:

    如果默认值在未来发生重大变化,明确配置可以防止出现不希望的行为。

    documentation 解释了这些配置属性之间的关系。我将内联下面的默认行为:

    moduleResolution:

    默认值:

    Classic 如果moduleAMDUMDSystemES6/ES2015

    如果modulenode12nodenext,则匹配,

    Node 否则。

    允许:

    • classic
    • node

    module:

    默认值:

    CommonJS 如果targetES3ES5

    ES6/ES2015 否则。

    允许:

    • none
    • commonjs
    • amd
    • umd
    • system
    • es6/es2015
    • es2020
    • es2022
    • esnext
    • node12
    • nodenext

    target:

    默认值:

    ES3

    允许:

    • es3
    • es5
    • es6/es2015
    • es2016
    • es2017
    • es2018
    • es2019
    • es2020
    • es2021
    • esnext

    【讨论】:

    • 我的问题是把它们都设置成这样, "module": "commonjs" & "moduleResolution": "node" 似乎不需要。
    • 两者都是默认值,因此都不需要。如果要输出一个CJS模块,将module设置为commonjs,则不需要显式设置moduleResolution的值。
    • 您好,检查我的更新
    • 这回答了你的问题吗?
    • 我不得不说我引用的问题回答了我的问题,但你的回答没有(至少从我的角度来看不是)。所以我只是赞成你的回答而不是接受它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2023-03-29
    • 2016-05-08
    相关资源
    最近更新 更多