Hacker News 中文摘要

RSS订阅

Deno 2.4 -- Deno 2.4

文章摘要

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 bundledeno 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 全局变量

  • BufferglobalsetImmediate 等 Node.js 全局变量现在对用户代码可用,无需额外标志。

14. 本地 npm 包支持

  • 改进了本地 npm 包的使用体验,patch 选项更名为 links,以更好地反映其功能。

15. Node.js API 支持改进

  • 新增了对 glob API 的支持,并提升了多个 Node.js 模块的兼容性,如 node:buffernode:events 等。

16. LSP 改进

  • Deno LSP 进行了多项改进,包括更好地处理 deno.config 选项、支持 Jupyter 单元格的 for await 语法等。

17. 其他有趣的功能

  • fetch 支持通过 Unix 和 Vsock 套接字进行请求。
  • deno serve 支持 onListen() 回调。
  • deno benchdeno coverage 的表格现在兼容 Markdown 格式。

18. 致谢

  • 感谢社区成员的贡献,特别是那些在 Discord 服务器中回答问题或报告 bug 的用户。

Deno 2.4 版本带来了许多新功能和改进,进一步提升了开发体验和性能。更多详细信息可以参考 Deno 2.4 的完整更新日志

评论总结

主要观点总结:

  1. 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."(我唯一的担心是他们失去耐心,开始做炒作驱动的事情。)
  2. 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兼容性,我认为兼容性环境变量会促进很多采用。)
  3. 安全性与安装方式

    • 批评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 | sh thing."(从安全角度来看,当项目明确要求用户使用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网站可能并不总是像核心代码库那样安全。)
  4. 技术细节与生态系统

    • 问题: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在生产环境中未被广泛使用的原因之一是缺乏标准化的漏洞数据库。)
  5. 功能改进

    • 正面评价bundle子命令的回归受到欢迎。
      • 引用: "I really like that bundle subcommand is back. No need to use workarounds."(我非常喜欢bundle子命令的回归,不再需要使用变通方法。)

总结:

Deno因其改进的设计和Node.js兼容性受到广泛好评,但也面临安全性、生态系统和技术兼容性方面的挑战。用户对其未来充满期待,但对其可能转向炒作驱动的开发方式表示担忧。