gpt4 book ai didi

node.js - 什么 TypeScript 配置产生最接近 Node.js 16 功能的输出?

转载 作者:行者123 更新时间:2023-12-04 11:37:40 24 4
gpt4 key购买 nike

Node.js 16 最近发布,带来了对 ES2021 的更新支持和对 ES 模块的稳定支持,如何配置 TypeScript 以输出利用所有这些新功能的 JavaScript 代码?

最佳答案

截至 Node.js 16.0.0 , 100%支持ES2021,支持ES Modules稳定!如果您知道您的目标是该版本或更新版本,则最佳配置如下所示:

  • "module": "ES2020" & "moduleResolution": "node"Node.js 16 支持加载模块而不是旧的 CommonJS 格式,我们必须告诉 TypeScript 我们正在使用 Node.js 的规则来解析模块。
  • "allowSyntheticDefaultImports": true为了提供向后兼容性,Node.js 允许您使用默认导入来导入 CommonJS 包。这个标志告诉 TypeScript 可以使用 import在 CommonJS 模块上。
  • "target": "ES2021"这告诉 TypeScript 可以输出带有 ES2021 特性的 JavaScript 语法。在实践中,这意味着它将例如输出逻辑赋值运算符和 async/await 语法,而不是嵌入 polyfill。
  • "lib": ["ES2021"]这告诉 TypeScript 可以使用 ES2021 或更早版本中引入的函数和属性。在实践中,这意味着您可以使用例如Promise.anyString.prototype.replaceAll .

  • 因此,完整的配置将是:
    {
    "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "lib": ["ES2021"],
    "module": "ES2020",
    "moduleResolution": "node",
    "target": "ES2021"
    }
    }
    除此之外,我们还需要告诉 Node.js 对待 .js此项目中的文件作为 ES 模块。这样做的原因是 Node.js 必须保持与为旧 Node.js 版本编写的代码的向后兼容性。这可以通过添加 "type": "module" 来完成给您的 package.json :
    {
    "type": "module"
    }
    如果您来自较早版本的 Node.js,另一个变化是 the file extensions when importing files are now mandatory .这意味着您必须写出 .js在本地导入结束时。请注意,这是 .js即使您导入的 TypeScript 文件实际上具有文件扩展名 .ts .这可能看起来有点令人困惑,但 this comment from one of the TS contributors explains why that is .
    以下是一些如何编写 import 的示例。声明:
    // Built-in Node.js modules
    import { readFileSync } from 'fs'

    // CommonJS packages from Npm
    import md5File from 'md5-file'

    // The local file "a.ts"
    import { a } from './a.js'

    如果你现在想坚持使用 CommonJS,为了避免上面解释的警告,你可以使用以下配置:
    {
    "compilerOptions": {
    "lib": ["ES2021"],
    "module": "CommonJS",
    "target": "ES2021"
    }
    }

    如果您正在运行 Node.js 14,您可以看到我的 similar answer for Node.js 14 here
    如果您正在运行 Node.js 12,您可以看到我的 similar answer for Node.js 12 here
    如果您正在运行 Node.js 10,您可以看到我的 similar answer for Node.js 10 here
    如果您正在运行 Node.js 8,您可以看到我的 similar answer for Node.js 8 here

    关于node.js - 什么 TypeScript 配置产生最接近 Node.js 16 功能的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67371787/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com