依赖、JSR 与 npm
管理 JSR、npm、Node 内置模块、imports、deno.lock 与缓存
添加依赖
deno install jsr:@std/assert
deno install npm:express
Deno 2.8 起,CLI 中不带前缀的包名默认按 npm 处理,所以 deno install express 等价于 deno install npm:express;代码里的 import 仍需 npm:,除非由 imports 或 package.json 映射。JSR 包在 CLI 仍写明 jsr:。
命令会更新 deno.json 的 imports,代码可使用映射后的名称:
import { assertEquals } from "@std/assert";
import express from "express";
import { readFile } from "node:fs/promises";
项目中的四个状态来源
| 位置 | 职责 |
|---|---|
deno.json(c) | 导入映射、tasks、workspace 和工具设置 |
package.json | npm 脚本/依赖与 Node 生态元数据,可与 Deno 共存 |
deno.lock | 锁定解析与完整性,应提交 |
Deno cache / node_modules | 本地物化结果,不作为评审事实源 |
CI 使用项目已提交的锁文件,并让锁文件不一致直接失败。不要通过删除 lockfile 掩盖解析冲突。
deno ci # Deno 2.8+:要求 lockfile、清理 node_modules、frozen install
deno ci --prod # 跳过 package.json devDependencies
选择来源
- 优先使用项目已有来源与导入约定。
- TypeScript 原生库与标准库通常优先查 JSR。
- 依赖 Node 生态或只有 npm 发布时使用 npm;内置模块写明
node:。 - URL 导入适合明确版本的 Web 模块,但团队项目通常用
imports集中管理。 - Deno 2.9 的
deno list查看项目声明依赖;deno link/unlink管理本地包链接。
排错时先运行 deno info 查看解析图与缓存位置,再检查代理、私有 registry 和证书配置。