最新消息:关注人工智能 AI赋能新媒体运营

Deno 2.0大改全域变数向Node.js靠拢

科技智能 admin 浏览 评论

Deno 2.0的开发已接近完成,进入候选版本的阶段。在Deno 2.0版本中,将有两大重要变更,第一是全域变数的改变,第二则是相依性管理的更新。当初Deno的出现,以改进Node.js的不足为主打,但是从这次全域变数的政策调整来看,Deno似乎从过去试图走出独特路线,转向更务实的妥协,逐渐回归与Node.js更相近的设计。

在Deno 2.0中,全域变数有两项重大变更,第一是移除window全域变数,第二则是引入Node.js的process全域变数。Deno从1.0版本就引入window全域变数,目的是希望Deno能够尽可能和浏览器相容,但是没想到window却成为许多开发者的问题来源。window是浏览器环境中的全域物件,代表浏览器的全域範围,因此当前端JavaScript程序码在浏览器中执行时,window可以正常运作,但是于服务器端环境却不适用。

Deno是一个服务器端的JavaScript执行环境,因此Deno中的window全域变数,常让开发者误以为在操作浏览器环境,window包含大量在浏览器中才具意义的API,因此当开发者不小心在Deno中使用,则会引发错误。有鉴于此,Deno 1.40开始便建议开发者不要使用window,改用globalThis或是self,而在Deno 2.0则会移除window全域变数。globalThis是ECMAScript标準中的统一全域物件,因此可在浏览器、Node.js和Deno中使用。

Deno 2.0的另一项全域变数改变,是引入Node.js重要全域物件process。process提供存取系统资讯、环境变数、命令列参数等功能。原本在Deno中的设计,要求开发者使用process必须显式汇入node:process,但对于仰赖process作为全域变数的Node.js程序和框架来说,这项要求带来额外的负担。

现在Deno为了相容性需求,让更多应用程序可以轻鬆无缝移植到Deno,因此在Deno 2.0中引入process全域变数。不过官方仍建议开发者尽量使用显式汇入方法,因此也添加一条新的lint规则,在编辑器中提示并且协助开发者快速进行修正。

Deno 2.0相依项目管理方面,新增了jsr:和npm:前缀以区分不同来源的套件,避免名称冲突。另外,Deno支援子路径规範,解决过去无法解析包含/子路径的问题。deno add与deno remove子命令的加入,简化了相依项目的添加和移除过程。而且当专案包含package.json,Deno则会优先将NPM相依项目新增到该文件,支援开发和生产相依项目分离管理。

发表我的评论
取消评论

表情

您的回复是我们的动力!

  • 昵称 (必填)
  • 验证码 点击我更换图片

网友最新评论