虽然像Deno这样的运行时能够原生地运行TypeScript的想法令人着迷,不需要编译过程,但在Node中原生运行TypeScript仍然有一定的距离。但我们可以在Node.js中直接运行TypeScript文件而无需任何编译步骤,这称为加载器(Loaders)。
加载器
加载器是充当读取模块和执行模块之间钩子的函数,例如,许多人习惯使用ts-node或ts-node-dev。
这两个软件包都是加载器,它们接收运行时加载的文件,并对其执行操作,在我们的情况下,操作是将TypeScript文件编译为JavaScript。
您可以在官方文档中了解有关此功能的更多信息,包括使用转换示例。
TSX
TSX是我们的ts-node的最新和最改进版本,它使用ESBuild快速将TS文件转译为JS。
最有趣的部分是,TSX被开发为Node的完整替代品,因此您实际上可以将TSX用作TypeScript REPL,只需使用npm i -g tsx全局安装它,在终端中运行tsx,然后就可以原生地编写TSX。
但更酷的是,您可以在运行文件时使用--loader tsx为所有TypeScript文件加载TSX。例如,假设我们有一个名为index.ts的文件:
代码语言:typescript复制export function main(a: number, b: number) {
console.log(a**b)
}
main(5,5)
如果我们运行 tsx index.ts 命令,将得到3125的输出,即使没有定义任何项目也是如此。
tsx还具有观察模式,可以使用 tsx watch <file> 来观察文件的更改。
TSX作为加载器
通过加载器运行一个文件(或所有文件)很简单,只需在package.json中创建一个启动脚本,并使用以下内容:
代码语言:json复制"scripts": {
"start": "node --loader tsx index.ts"
}
然后使用 npm start 运行。
使用TSX作为加载器不允许将其与其他选项一起使用,例如观察模式。
扩展功能
自Node 20.6版本以来,我们可以直接加载.env文件中存在的环境配置文件。但如何同时使用加载器和配置文件呢?
Node还会读取一个名为NODE_OPTIONS的环境变量,该变量允许您串联所有Node将接收到的选项,例如 NODE_OPTIONS='--loader tsx。
由于我们无法将 --env-file .env 选项作为NODE_OPTIONS选项之一传递,我们可以通过主命令加载加载器并传递配置文件:
代码语言:shell复制NODE_OPTIONS='--loader=tsx' node --env-file=.env index.ts
尝试在项目中运行此命令,以使开发变得更加轻松!
重要提示:直接从磁盘加载TS文件并使用加载器进行编译比先进行转译然后直接传递JavaScript文件要慢得多,因此建议仅在开发环境中执行此操作。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!