What we got wrong about HTTP imports
- 背景:Deno最初使用HTTP imports作为其模块系统的核心特性,旨在利用Web的分布式特性简化JavaScript开发,与npm的集中式注册表不同。
- 设计初衷:通过HTTP imports,Deno希望消除
package.json
和node_modules
文件夹的需求,简化项目结构,实现单文件程序的扩展性。
- 实际问题:
- URL长度:长URL使代码库变得杂乱,尤其是在大型项目中。
- 依赖管理:随着项目规模的增长,管理长URL和版本变得繁琐。
- 重复依赖:URL缺乏语义化版本控制,难以管理依赖,导致代码库中出现同一库的多个版本。
- 可靠性问题:去中心化的模块系统导致可靠性问题,如模块托管在不稳定的服务器上。
解决方案
- Import Maps:Deno引入了Import Maps,一种浏览器的Web标准,允许使用简短且易于记忆的标识符,并跨多个文件管理版本。
- JSR(JavaScript Package Registry):Deno创建了JSR,一个集中式仓库,理解并强制执行语义化版本控制,解决重复依赖问题,并提高模块的可靠性。
JSR的特点
- JSR是一个开源、跨运行时的代码注册表,允许用户轻松共享现代JavaScript和TypeScript代码。
- JSR解决了依赖多个主机提供模块的可靠性问题,并使用语义化版本控制避免了重复依赖问题。
Deno 2的展望
- Deno 2将继续支持HTTP imports,但推荐使用Import Maps和JSR。
- Deno 2将带来一些改进,包括对模块共享、版本控制和依赖管理的优化。
- Deno 2计划于今年9月发布,将包含对现有Deno脚本的向后兼容性和一些较小的破坏性变更。