【发布时间】:2020-05-04 08:30:35
【问题描述】:
输出将在 Node.js 12 上运行的代码的最佳 TypeScript tsconfig 设置是什么?
【问题讨论】:
标签: node.js typescript
输出将在 Node.js 12 上运行的代码的最佳 TypeScript tsconfig 设置是什么?
【问题讨论】:
标签: node.js typescript
从 Node.js 12.0.0 开始,支持 100% 的 ES2019。如果您知道您的目标是该版本或更高版本,则最佳配置如下所示:
"module": "commonjs"
Node.js 正在添加 ES-Modules,但现在我们必须坚持使用 CommonJS。
"target": "es2019"
这告诉 TypeScript 可以输出带有 ES2019 特性的 JavaScript 语法。在实践中,这意味着它将例如输出对象 rest/spread 属性和 async/await 语法,而不是嵌入 polyfill。
"lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"]
这告诉 TypeScript 可以使用 ES2019 或更早版本中引入的函数和属性。在实践中,这意味着您可以使用例如String.prototype.trimStart 和 Array.prototype.flat。
除了 ES2019,Node.js 12 还支持 ES2020 中的 BigInt 和 matchAll,因此我们包含了 ES2020 中的附加定义。
完整的配置将是:
{
"compilerOptions": {
"lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"],
"module": "commonjs",
"target": "es2019"
}
}
如果您的目标是 Node.js 12.9.0 或更新版本,您可以简单地指定 "lib": ["es2020"],因为该版本支持 ES2020 中引入的所有新函数和属性。不过它不支持新的 JavaScript 语法,所以你仍然需要继续使用"target": "es2019"。
完整的配置将是:
{
"compilerOptions": {
"lib": ["es2020"],
"module": "commonjs",
"target": "es2019"
}
}
如果你运行的是 Node.js 16,你可以看到我的 similar answer for Node.js 16 here
如果你运行的是 Node.js 14,你可以看到我的similar answer for Node.js 14 here
如果你运行的是 Node.js 10,你可以看到我的 similar answer for Node.js 10 here
如果你运行的是 Node.js 8,你可以看到我的similar answer for Node.js 8 here
【讨论】:
??...如果可能的话,我建议您升级到支持完整 ES2020 目标的 Node.js 14。
TL:DR
TypeScript 维护了与节点版本对应的目标、模块和库的映射。你可以在这里找到它 https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping
【讨论】:
使用tsconfig bases 会容易得多。
运行 npm install --save-dev @tsconfig/node12 然后在 tsconfig.json 中
{
"extends": "@tsconfig/node12/tsconfig.json",
// ...your configrations
}
有一些针对不同环境的 tsconfig 库,社区不断添加更多。
【讨论】: