大厂技术 高级前端 Node进阶点击上方 程序员成长指北,关注公众号
回复1,加入高级Node交流群
本文作者:五月君
前言
Node.js 近日刚合并了一个 PR#53725[1],主要内容是通过设置 flag --experimental-strip-types
,使得可以在 Node.js 中直接执行 TypeScript
文件。Node.js 会自动将 TypeScript
源代码转译为 JavaScript
源代码,不需要手动安装依赖来做转译了。在这个转译过程中,不会进行类型检查,所有的类型信息都会被丢弃。
关于动机。在以往的所有调查中,用户都表达了这个需求,必须承认这一点不容忽视,用户有需求就要重视。同时,近年来 TypeScript 的普及率也是越来越高(现在不学 TS 感觉自己都要被淘汰了,哈哈哈...)。
通过 Node.js 内置 TS 功能,用户是不需要安装外部依赖和一些加载器的。
例如,直接运行 node index.ts
const foo: string = "foo";
转换后的代码为:
const foo = "foo";
其他运行时环境也会将一些 TypeScript 特有的功能转化为 JavaScript,例如枚举(Enums),而枚举在 JavaScript 中是不存在的。至少在这个 PR 的初始阶段,不会进行这种转化,这意味着使用 Enum
, namespaces
等特性将不可行。
在工具上选择 @swc/wasm-typescript
,因为这考虑到了简洁性,其它工具可能会将 Rust 和 Go 也添加到工具链中,而 @swc/wasm-typescript
只是一个包含 wasm 文件和一个用于绑定 js 文件的小包,并且 Swc 目前也被 Deno 用于同样的目的,还经过了实战测试 😄。
目前还存在一些限制:
不支持需要转化的 TypeScript 特性(如枚举、命名空间等)。
.ts 文件不支持 .js 扩展名。
无法运行 node_modules 中的 TypeScript 文件。
不支持源映射,但由于我们执行空格处理(用空格替换移除的代码),这样就不需要改变原始错误堆栈,因此不需要源映射,参考 Sourcemaps 问题[2]。
该 PR 只是实现实验性支持 TS 的第一步,还有一些工作要做,详细参考实验性支持 TS 路线图[3]
最后,关于 Node.js 将实验性支持 TS 你怎么看?欢迎评论区留言!
参考资料
[1]
PR#53725: https://github.com/nodejs/node/pull/53725
[2]Sourcemaps 问题: https://github.com/nodejs/node/pull/53725#issuecomment-2209238883
[3]实验性支持 TS 路线图: https://github.com/nodejs/loaders/issues/217
- End -
Node 社群
我组建了一个氛围特别好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你对Node.js学习感兴趣的话(后续有计划也可以),我们可以一起进行Node.js相关的交流、学习、共建。下方加 考拉 好友回复「Node」即可。
“分享、点赞、在看” 支持一波👍