文章摘要
Deno 2.4版本带来了多项新功能和改进,包括重新引入的deno bundle命令,支持导入文本和字节,内置OpenTelemetry的稳定化,新的--preload标志用于修改Deno环境,以及更简便的依赖管理工具deno update。此外,还增加了脚本覆盖率收集、权限变更、条件性package.json导出等功能,提升了开发体验和工具链的灵活性。
文章总结
Deno 2.4 版本带来了多项新功能和改进,以下是主要内容总结:
1. deno bundle 回归
deno bundle子命令重新引入,用于将 JavaScript 或 TypeScript 文件打包为单文件 JavaScript 包。- 支持服务器端和浏览器平台,兼容 npm 和 JSR 依赖,并自动进行 tree shaking 和压缩。
- 未来计划提供运行时 API,支持以编程方式进行打包。
2. 导入文本和字节
- 通过
--unstable-raw-imports标志,可以直接将文本、字节等非 JavaScript 文件导入到模块图中,简化了文件 I/O 操作。 - 支持与
deno bundle和deno compile结合使用,将资源嵌入到最终编译的二进制文件中。
3. 内置 OpenTelemetry 稳定
- OpenTelemetry 支持现已稳定,无需
--unstable-otel标志即可使用。 - 自动关联日志与 HTTP 请求,简化了 JavaScript 项目的可观测性。
4. 新的 --preload 标志
--preload标志允许在主脚本执行前运行代码,适用于修改全局变量、加载数据、连接数据库等场景。
5. 依赖管理改进
- 新增
deno update子命令,支持将依赖更新到最新版本,简化了依赖管理流程。
6. 脚本覆盖率收集
deno run --coverage支持在运行脚本时收集覆盖率信息,弥补了deno test在子进程覆盖率收集上的不足。
7. DENO_COMPAT=1 环境变量
- 新增
DENO_COMPAT=1环境变量,用于在package.json优先的项目中启用多项兼容性标志,提升开发体验。
8. 权限变更
--allow-net标志支持子域名通配符和 CIDR 范围。- 新增
--deny-import标志,允许显式阻止从特定主机导入代码。
9. 条件性 package.json 导出
- 支持 npm 包的条件性导出,允许根据用户提供的条件选择不同的导出内容。
10. deno run 支持裸说明符
deno run现在支持使用裸说明符作为入口点,简化了模块导入和运行。
11. deno fmt 支持 XML 和 SVG 文件
deno fmt现在支持自动格式化.xml和.svg文件,并新增了对.mustache模板的支持。
12. 更好的 tsconfig.json 支持
- 自动发现
tsconfig.json文件,并更好地处理"references"、"extends"等选项,提升了与前端框架的兼容性。
13. 简化 Node.js 全局变量
Buffer、global、setImmediate等 Node.js 全局变量现在对用户代码可用,无需额外标志。
14. 本地 npm 包支持
- 改进了本地 npm 包的使用体验,
patch选项更名为links,以更好地反映其功能。
15. Node.js API 支持改进
- 新增了对
globAPI 的支持,并提升了多个 Node.js 模块的兼容性,如node:buffer、node:events等。
16. LSP 改进
- Deno LSP 进行了多项改进,包括更好地处理
deno.config选项、支持 Jupyter 单元格的for await语法等。
17. 其他有趣的功能
fetch支持通过 Unix 和 Vsock 套接字进行请求。deno serve支持onListen()回调。deno bench和deno coverage的表格现在兼容 Markdown 格式。
18. 致谢
- 感谢社区成员的贡献,特别是那些在 Discord 服务器中回答问题或报告 bug 的用户。
Deno 2.4 版本带来了许多新功能和改进,进一步提升了开发体验和性能。更多详细信息可以参考 Deno 2.4 的完整更新日志。
评论总结
主要观点总结:
Deno的潜力与未来
正面评价:Deno被认为是Node.js的改进版,许多人对其未来充满期待。
- 引用: "I really love where Deno is going, it really is what Node should've been."(我真的很喜欢Deno的发展方向,它确实是Node应该成为的样子。)
- 引用: "I keep hearing good things about Deno. It might just convince me to try js after all!"(我一直听到关于Deno的好评,这可能会说服我尝试JavaScript。)
担忧:担心Deno可能因竞争压力而转向炒作驱动的开发。
- 引用: "My only concern is that they lose patience to their hype-driven competition and start doing hype-driven stuff themselves."(我唯一的担心是他们失去耐心,开始做炒作驱动的事情。)
Node.js兼容性与工具
- 正面评价:Deno的Node.js兼容性被低估,可能促进其采用。
- 引用: "People underestimate the node compatibility that Deno offers. I think the compat env variable will do a lot of adoption."(人们低估了Deno提供的Node兼容性,我认为兼容性环境变量会促进很多采用。)
- 正面评价:Deno的Node.js兼容性被低估,可能促进其采用。
安全性与安装方式
- 批评:
curl | sh安装方式存在安全风险,建议使用更安全的npm install。- 引用: "From a security standpoint it really icks me when projects prominently ask their users to do the
curl mywebsite.com/foo.sh | shthing."(从安全角度来看,当项目明确要求用户使用curl | sh时,我感到非常不安。) - 引用: "Even though deno has excellent programmers working on the main project, the deno.land website might not always be as secure as the main codebase."(尽管Deno有优秀的程序员在开发核心项目,但deno.land网站可能并不总是像核心代码库那样安全。)
- 引用: "From a security standpoint it really icks me when projects prominently ask their users to do the
- 批评:
技术细节与生态系统
- 问题:Deno在FreeBSD上不可用,且缺乏标准化的漏洞数据库。
- 引用: "Crazy that Deno is still not workable on FreeBSD because of the Rust V8 bindings not being ported."(令人惊讶的是,由于Rust V8绑定未移植,Deno在FreeBSD上仍然无法使用。)
- 引用: "I believe the reason Deno is not more widely used in production environments is the lack of a standardized vulnerability database."(我认为Deno在生产环境中未被广泛使用的原因之一是缺乏标准化的漏洞数据库。)
- 问题:Deno在FreeBSD上不可用,且缺乏标准化的漏洞数据库。
功能改进
- 正面评价:
bundle子命令的回归受到欢迎。- 引用: "I really like that bundle subcommand is back. No need to use workarounds."(我非常喜欢
bundle子命令的回归,不再需要使用变通方法。)
- 引用: "I really like that bundle subcommand is back. No need to use workarounds."(我非常喜欢
- 正面评价:
总结:
Deno因其改进的设计和Node.js兼容性受到广泛好评,但也面临安全性、生态系统和技术兼容性方面的挑战。用户对其未来充满期待,但对其可能转向炒作驱动的开发方式表示担忧。