本公众号由以下老铁赞助,感谢他们❗️
品牌位赞助招募中
合作 | 共赢 | 生态 | 发展
01
前言
记得早在两年前,麒麟子就说如果开发游戏服务器,他只用两种语言:Node.js 或 Go,但他最后还是选 Node.js。
因为 Cocos Creator 3.x 全面转向 TypeScript 语言,能够驾御更大、更复杂的游戏项目。
后端使用 Node.js 的话,那只需要一门编程语言,就可以同时搞定前后端开发,何乐而不为呢?
说真的不得不佩服,麒麟子对技术的敏锐与长远眼光!
02
Node.js实验性功能支持TypeScript
最近,Node.js 社区果然传来激动人心的消息: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 的新特性和变化。
你对于 Node.js 原生支持 TypeScript,你怎么看呢?欢迎在评论区留言分享你的看法!
今天的分享就到这里,感谢点赞再看!我们下期再见!
本公众号由以下老铁赞助,感谢他们!
游戏开发,副业变现
晓衡的愿景是助力 1000 位个人开发者
一年独立挣钱10W+
欢迎加晓衡微信