用Node.js带来了对ES2020的更新支持,并增加了对ES模块的支持,如何配置TypeScript以输出利用所有这些新功能的JavaScript代码?
用Node.js带来了对ES2020的更新支持,并增加了对ES模块的支持,如何配置TypeScript以输出利用所有这些新功能的JavaScript代码?
从Node开始.js 14.0.0
,14.0.0
%支持ES2020,对ES模块的支持已经登陆!如果您知道您的目标是该版本或更新版本,那么最佳配置如下所示:
"module": "ES2020"
&;"moduleResolution": "node"
node .js 14支持加载模块,而不是旧的CommonJS格式,我们必须告诉TypeScript我们正在使用Node.js解析模块的规则.
"allowSyntheticDefaultImports": true
要提供向后兼容性,请 Select Node.js允许您使用默认导入导入CommonJS包.这个标志告诉TypeScript,可以在CommonJS模块上使用import
.
"target": "ES2020"
这告诉TypeScript,可以输出带有ES2020特性的JavaScript syntax.在实践中,这意味着它将输出可选的链接操作符&;异步/等待语法,而不是嵌入polyfill.
"lib": ["ES2020"]
这告诉TypeScript可以使用ES2020或更早版本中引入的functions and properties.实际上,这意味着您可以使用例如Promise.allSettled
和BigInt
.
因此,完整配置将是:
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"lib": ["ES2020"],
"module": "ES2020",
"moduleResolution": "node",
"target": "ES2020"
}
}
除此之外,我们还需要告诉Node.js将此项目中的.js
个文件视为ES模块.原因是这个 node .js必须与为旧 node 编写的代码保持向后兼容性.js版本.这可以通过在package.json
中添加"type": "module"
来实现:
{
"type": "module"
}
如果您是从早期版本的Node提交,则另一个更改.那是the file extension when importing files are now mandatory.这意味着您必须在本地进口的末尾填写.js
.请注意,这是.js
,即使您正在导入一个实际具有文件扩展名.ts
的TypeScript文件.这似乎有点让人信服,但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": ["ES2020"],
"module": "CommonJS",
"target": "ES2020"
}
}
如果您正在运行Node.js 16你可以看到我的similar answer for Node.js 16 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