关于Deno项目模块导入方式的疑问及相关技术咨询
Deno模块导入优先级与常见问题解答
一、导入优先级的官方推荐顺序
你的猜测和官方推荐不符,当前Deno官方的推荐优先级为:
- JSR:Deno官方维护的新一代包注册表,专为TypeScript/ES模块设计,具备严格的发布规范、原生类型支持和跨环境兼容性,是当前首选。
- deno.land/x:早期的社区包托管平台,包由开发者主动提交,适合寻找Deno生态原生维护的模块。
- esm.sh:用于将npm包转译为标准ES模块,适配Deno环境,适合找不到JSR/deno.land/x版本的npm包。
- npm:通过
npm:前缀直接导入原生npm包,适合必须使用npm特定依赖的场景。
二、具体疑问解答
1. deno.land/x的模块收录标准
deno.land/x的模块并非自动收录,而是由开发者主动提交,需满足以下核心条件:
- 项目为开源状态,托管在GitHub、GitLab等公开代码平台;
- 代码符合ES模块规范,能直接在Deno环境运行;
- 提交者需为项目维护者或获得官方授权。
Express未出现在deno.land/x中,原因有两点:一是Express官方未主动提交该包;二是Express大量依赖Node.js专属API,虽Deno可兼容运行,但并非Deno生态的原生适配模块,社区也未有人主动提交适配后的版本。
2. esm.sh导入Hono CORS中间件的正确方式
你之前的路径缺少了文件后缀.ts,esm.sh需要严格对应npm包内的文件路径。npm上的Hono包中,CORS中间件的文件路径为middleware.ts,正确导入方式为:
import { cors } from 'https://esm.sh/hono@4.3.8/middleware.ts'
也可以直接从Hono主包中解构导入(部分版本支持):
import { Hono, cors } from 'https://esm.sh/hono@4.3.8'
3. JSR的用途及未找到Hono/Express的原因
JSR是Deno官方推出的跨环境包注册表,核心用途包括:
- 原生支持TypeScript,无需额外安装类型定义包;
- 提供严格的版本管理、包发布规范,确保包质量;
- 支持包子集导出、自动树摇,优化打包体积;
- 同时兼容Deno、Node.js和浏览器环境。
找不到Hono是因为它在JSR上的包名为@hono/hono,而非直接搜"Hono";Express未出现在JSR中,是因为它是Node.js专属框架,未适配JSR的ES模块规范,官方也未发布对应版本。
内容的提问来源于stack exchange,提问作者hh54188
相关产品推荐
相关产品推荐

