Node.js原生支持TypeScript?老铁这眼光,我真的服了!
共 3954字,需浏览 8分钟
·
2024-07-30 20:48
本公众号由以下老铁赞助,感谢他们❗️
品牌位赞助招募中
合作 | 共赢 | 生态 | 发展
01
前言
记得早在两年前,麒麟子就说如果开发游戏服务器,他只用两种语言:Node.js 或 Go,但他最后还是选 Node.js。
因为 Cocos Creator 3.x 全面转向 TypeScript 语言,能够驾御更大、更复杂的游戏项目。
后端使用 Node.js 的话,那只需要一门编程语言,就可以同时搞定前后端开发,何乐而不为呢?
说真的不得不佩服,麒麟子对技术的敏锐与长远眼光!
02
Node.js实验性功能支持TypeScript
相信做 Web 前端或使用 Node.js 开发服务器的老铁,都喜欢 Node.js 的轻量与高效。
但,随着 TypeScript 的兴起,许多老铁都希望 Node.js 能直接运行 TypeScrip 代码,而不是要先将 TS 代码编译成 JS 再运行。
现在,这一期待即将成为现实!
现在你只需通过 github 合并 PR#53725,Node.js 引入了一项新特性:通过设置 --experimental-strip-types
参数,就可以直接执行 TypeScript 文件了。
Node.js 将自动将 TypeScript 源代码转译为 JavaScript 源代码,无需手动安装转译工具。通过简单的命令 node index.ts
直接运行 TS 文件。
需要注意的是,转译过程中所有类型信息将被丢弃,Node.js 称之为 "type stripping"(类型剥离)。
例如,原本的 TypeScript 代码:
const foo: string = "foo";
将被转译为:
const foo = "foo";
虽然这一功能很是让人兴奋,不过目前它还存在一些限制,它还不支持 TypeScript 的一些高级特性,如:枚举和命名空间。
还有 .ts
文件不能使用 .js
扩展名,也无法在 node_modules 中运行 TypeScript 文件。
03
Node.js支持TS路线图
不过这只是实验性支持的第一步,Node.js 团队已经在 GitHub 上发布了详细的实验性支持 TS 路线图。
链接:https://github.com/nodejs/loaders/issues/217
Node.js 支持 TypeScript 的路线图可以概括为以下几个主要步骤:
第一步:初始实现
引入
--experimental-strip-types
标志,用于概念验证和收集项目合作者的反馈。目前的限制包括不支持需要转换的 TypeScript 特性(如枚举、命名空间等),没有
.js
扩展名支持,不支持在node_modules
中运行 TypeScript,以及没有源映射。第二步:特性解耦
类似于 Node.js 中 npm 的独立升级方式,考虑将 TypeScript 编译器作为可独立升级的组件。
创建一个可从 npm 下载并包含当前 Node 使用的 API 的包,允许用户根据需要升级 TypeScript 版本。
第三步:性能优化
在项目稳定运行的基础上,开始考虑性能问题。
考虑将 SWC 编译器集成到 Node.js 中,可能的优化方法包括使用 Rust、WebAssembly 或静态库等。
第四步:增加更多特性
扩展对 TypeScript 特性的支持,包括需要转换的特性。
考虑允许在
node_modules
中运行 TypeScript 文件,尽管这一点目前尚未达成共识。提供额外的实用工具和配置选项,如转换器 API、tsconfig 支持等,以提高用户体验。
后续将会有更多特性得到支持,新特性必须做到不破坏现有的生态系统,同时保持 Node.js 的稳定性和性能。
整个过程,Node.js 团队会持续收集社区的反馈,并根据反馈进行调整,避免引入可能导致不稳定的因素,同时提供足够的灵活性以适应 TypeScript 的新特性和变化。
本公众号由以下老铁赞助,感谢他们!