写点什么

Node 之父着急宣布:Deno 将迎来重大变革,更好地兼容 Node 和 npm 包

  • 2022-08-17
    北京
  • 本文字数:2172 字

    阅读完需:约 7 分钟

Node之父着急宣布:Deno将迎来重大变革,更好地兼容Node和npm包

或许是因为受到来自近日大火的「Bun」的压力,Deno 官方在 8 月 15 日发布了一篇名为《Deno 即将发生重大变化》的博文

Deno 的焦虑


2018 年,Node.js 的创始人 Ryan Dahl 在 JSConf EU 上做了主题为 “10 Things I Regret About Node.js” 的分享,Ryan 回顾了在他看来当初开发 Node.js 时留下的十大遗憾。由于 Node.js 现在已经广泛应用于各个领域,为了保证兼容性,对 Node.js 底层进行大规模改造已经不现实。于是 Ryan 宣布他决定开发一个全新的 JavaScript 运行时以解决当初的种种缺陷,这便是 Deno 的由来。


Deno 由以下技术构建:


  • Rust(Deno 的核心是用 Rust 编写的,Node 用 C ++编写)

  • Tokio(用 Rust 编写的事件循环)

  • TypeScript(Deno 支持 JavaScript 和开箱即用的 TypeScript)

  • V8(google 在 Chrome 和 Node 等中使用的 JavaScript 运行时)


不过,尽管 Deno 宣称解决了一些长期困扰开发者的老大难问题(把 es-modules 设定成默认值,引入了第一方 TypeScript 支持(无需在发布前转译 npm 模块等等),但在一些用户看来,Deno 在解决老问题的同时,也引入了不少新问题。


其中,生态是 Deno 主要被诟病的问题。首先,Deno 对包解析和语法做的变更过于大刀阔斧,导致没法跟原有 npm 生态系统兼容。换言之,Deno 需要培养起自己的全新库生态。虽然 Deno 慢慢开始支持一些早期库,但一个项目的影响力会直接决定它的发展上限。当然也有一些变通方法,比如把 npm 包转换成 Deno 包的 CDN,但也有人觉得这不是什么好招。


此外,Deno 还有着不少暴露其半成品身份的问题,比如缺少 package.json。无论是从模块解析的角度来看,还是从缺少 manifest 文件出发,Deno 都不允许开发者为自己的包编写可扩展元数据。GoLang 甚至专门为此引入了 go.mod。

即将有重大变革


8 月 15 日,Deno 官方发布了一篇名为《Deno 即将发生重大变化》的博文。这个时机点难免让人将其与前阵子大火的「Bun」联想起来。


Bun 是今年才发布的前端工具链项目,作者是前 Stripe 开发人员 Jared Sumner 。不同于 Node.js 和 Deno 使用的 V8 引擎,Bun 使用 JavaScriptCore 引擎,并用 Zig 编程语言编写。


据悉,Bun 最初只是一种 JavaScript webserver,但在后续发展中逐渐酝酿出了全面颠覆 JS 生态系统的野心,它的性能表现优异,其 React 的服务器端渲染速度据称是 Node 或 Deno 的三倍以上。


面对这样的强劲新对手,Deno 也迫不及待要预告自己的新动态和进展。


根据官方博文,Deno 这次想要对外强调的进展包括:


  • 团队一直在通过更新降低 Deno 对 npm 包的导入门槛,预计未来三个月内,绝大多数 npm 包都能在 Deno 中顺畅运行。

  • Deno 目标是成为最快的 JavaScript 运行时。这里向新用户稍做解释,Deno 的下个版本将包含新的 HTTP 服务器,这也是有史以来速度最快的 JavaScript Web 服务器。

  • 考虑到不少大型企业和公司初创团队都在使用 Deno,其将面向这些商业用户提供办公时段专用套餐。


下面我们一同看看 Deno 具体的变化是什么样的:

Node 与 npm 兼容性


在未来三个月内,有 80%到 90%的 npm 包都能够顺畅运行在 Deno 当中。具体实现方式是使用特殊的 npm URL,具体示例:


import express from "npm:express@5";
复制代码


未来三个月内,大多数 npm 模块都能通过上述方式作为依赖项引入。用户将告别 node_modules 文件夹、告别 npm install;这些包将被自动下载至 Deno 缓存内。从类型检查到 LSP、再到 deno vendor,所有 Deno 工具都可以使用这些 npm 包。

最快的 JavaScript 运行时


官方称 Deno 将成为速度最快的 JavaScript 运行时,没有之一。他们 100%相信,Deno 自身的技术堆栈、V8 再加上 Rust 完全可以把这个目标变成现实。


Deno 的 HTTP 服务器也在经历大改,“现在我们向大家正式宣布,它就是有史以来速度最快的 JavaScript Web 服务器。我们整个运营系统的优化度越来越高,能够直连 V8 Fast API 以通过 JS 快速调用本机代码。同样地,我们的外部函数接口(FFI)也迎来了振奋人心的更新。请注意,我们可不是在针对少数极端情况进行优化,而是真正实现了整体实践层面的性能提升。”


Deno 表示,预计在今年夏天结束之前,相关成果就将正式发布、供大家上手体验。

支持企业用户


Deno 指出,在最近进行的调查中,发现近半数 Deno 活跃用户会在工作当中使用 Deno,其中包括不少大企业的开发者和初创公司创始人。未来,团队希望将为在商业环境中使用 Deno 的朋友们提供免费办公时段套餐。


因为 Deno 团队的规模还相当有限,所以呼吁相关用户先填写表单,需求将根据大家的项目规模和紧迫性进行优先级排序。表格填写地址:https://docs.google.com/forms/d/e/1FAIpQLSewMCz1wB8SMZI8n7xUVeH00tBo5xLBGmj26-QVjjhQ4FfZlQ/viewform

流畅的开发者体验


在接下来几个月中,Deno 将陆续发布后续更新,包括全部第三方 Deno 代码实现全文符号搜索,以及自动为 JavaScript 和 TypeScript 项目生成文档等。下图为功能预览界面:



最后,Ryan Dahl 表示对 Deno 过去几年中建立的庞大生态系统和良好的支持成效感到自豪。目前,Deno 在 GitHub 上的下载量已突破 410 万次,月活跃用户高达 25 万,项目采用率还在持续提升。


“哇,对兼容 npm 的 Deno 非常感兴趣!我认为这将消除进入 Deno 的巨大障碍。”


“一旦 Deno 发布了这些功能,我将再次尝试 Deno。”


网友的反应来看,Deno 的这番“紧急预告”已经开始产生效果。不过,用户也许还得等两三个月才能用上改进后的新版 Deno。


参考链接:

https://deno.com/blog/changes

https://www.infoq.cn/article/3ZyWlLFvesQtS8acV7UU

2022-08-17 14:4416864
用户头像
罗燕珊 InfoQ中文站编辑

发布了 470 篇内容, 共 306.9 次阅读, 收获喜欢 791 次。

关注

评论 3 条评论

发布
用户头像
终于发展到性能指标也是着重点之一了,毕竟...没道理...慢那么多的[doge],非常期待^-^
2022-08-19 01:37 · 广西
回复
用户头像
卷!
2022-08-18 08:32 · 浙江
回复
用户头像
好呀,拭目以待。忍 node_modules 文件夹很久了
2022-08-18 07:31 · 广东
回复
没有更多了
发现更多内容

ZooKeeper 分布式锁 Curator 源码 03:可重入锁并发加锁

程序员小航

Java zookeeper 源码 分布式锁 zookeeper分布式锁

23w字!Github一夜爆火被各大厂要求直接下架的Java面试题库也太强了

Java架构师迁哥

C++17 中的条件变量

hedzr

c++ 算法 并发编程 元编程 policy

Vue进阶(五十七):ES数组操作:find(), findIndex(), filter(), forEach(), some(), every(), map(), reduce()

No Silver Bullet

Vue ES 7月日更 数组操作

Vue进阶(五十八):ES字符串操作:遍历、比较、截取、补全...

No Silver Bullet

Vue ES 字符串 7月日更

手写Spring框架,是时候撸个AOP与Bean生命周期融合了!

小傅哥

Java spring 小傅哥 aop 代理

王者荣耀商城异地多活架构设计

chenmin

开跑!Mobileye自动驾驶汽车路测落地纽约

E科讯

Discourse 的标签(Tag)只能是小写的原因

HoneyMoose

密码学系列之:Merkle–Damgård结构和长度延展攻击

程序那些事

加密解密 密码学 程序那些事

价值连城 知名深度强化学习Pieter Abbeel的采访 John 易筋 ARTS 打卡 Week 56

John(易筋)

ARTS 打卡计划

登陆框有多危险,可能你还不知道。。。

网络安全学海

黑客 网络安全 信息安全 渗透测试· 漏洞分析

结构化流-Structured Streaming(八-中)

Databri_AI

spark 结构化思维 Kafk

Rust从0到1-面向对象编程-设计模式

rust 设计模式 面向对象编程 状态模式 state pattern

一个很多人不知道的SpringBoot小技能!!

冰河

Java 分布式 微服务 springboot 服务化

巧用 readonly与 const

喵叔

7月日更

没有电和网络的时候如何支付一瓶水?

escray

学习 极客时间 朱赟的技术管理课 7月日更

在线时间加减计算器

入门小站

工具

Python OpenCV 图像的 最近邻插值 与 双线性插值算法 优化迭代

梦想橡皮擦

Python 7月日更

网络协议:TCP可靠传输原理

赖猫

c++ TCP 后端 网络协议

和12岁小同志搞创客开发:如何使用继电器?

不脱发的程序猿

DIY 嵌入式 创客开发 继电器

后疫情时代,共享育儿也能变成一门好生意?!

脑极体

week 9 作业

Geek_2e7dd7

架构实战营

Linux之date命令

入门小站

Linux

并发问题的源头

Java旅程

Java 并发编程

阿里培训笔记惨遭泄露,Spring+SpringBoot+SpringCloud

Java架构师迁哥

linux c解决多个第三方so动态库包含不同版本openssl造成的符号冲突

奔着腾讯去

openssl so动态库 动态链接库

maven是什么

卢卡多多

7月日更

网络传输协议kcp原理解析

赖猫

TCP 网络协议

iOS15上线图片翻译功能,能取代专业翻译软件吗?

脑极体

携手生态伙伴亮相InfoComm,英特尔赋能智能协作办公

E科讯

Node之父着急宣布:Deno将迎来重大变革,更好地兼容Node和npm包_语言 & 开发_罗燕珊_InfoQ精选文章