包管理与依赖
Deno 包管理与依赖
Deno 以 deno.json 管理项目(imports、tasks 等),依赖通过 URL、jsr:、npm: 解析并缓存到本地(默认 DENO_DIR),通常不需要像 Node 那样维护庞大的 node_modules 树。在需要与 Node 生态互通时,也可使用 package.json 与 node_modules(见 Node 兼容)。这一模型使依赖来源更显式,便于审计与复现。
一、主要的包注册表
| 注册表 | 说明 |
|---|---|
| JSR (JavaScript Registry) | Deno 生态系统的现代包注册中心,安全性优先,支持语义化版本控制。导入格式:jsr:@scope/pkg |
| npm | Deno 2 已完整兼容 npm 包,可使用 npm: 语法导入。例如:npm:express、npm:lodash@4 |
Deno 还支持直接从任意 HTTPS URL 导入模块(如 https://deno.land/x/...)。
二、标准库(std)
Deno 提供一套经过核心团队审计的标准库(https://deno.land/std),功能涵盖文件系统、HTTP、测试、日志等。
推荐使用固定版本,避免因标准库更新导致的不兼容问题:
// ✅ 推荐:固定版本
import { copy } from "https://deno.land/std@0.186.0/fs/copy.ts";
// ❌ 不推荐:始终使用最新版本(可能引入不兼容变更)
import { copy } from "https://deno.land/std/fs/copy.ts";
注意:标准库中的部分模块使用了不稳定的 Deno API。如果运行时遇到类似
Property does not exist on type 'typeof Deno'的 TypeScript 错误,通常表明该模块依赖了不稳定的 API,需要添加--unstable标志。
三、导入外部包
Deno 支持多种导入方式:
// 从 JSR 导入(Deno 官方生态)
import { serve } from "jsr:@std/http";
// 从 npm 导入(需要 Node.js 兼容层)
import express from "npm:express@4";
// 直接从 URL 导入
import { camelCase } from "https://deno.land/x/lodash@4.17.15/lodash.js";
对于第三方 URL 导入,建议固定版本号(如 URL 中包含
@version)。
四、包管理命令
| 命令 | 说明 |
|---|---|
deno add jsr:@pkg | 添加 JSR 包到 deno.json |
deno add npm:pkg | 添加 npm 包 |
deno remove | 移除依赖 |
deno install | 安装 deno.json 中所有依赖(预下载到缓存) |
deno outdated | 查看过期依赖 |
deno audit | 扫描依赖的安全漏洞(检查 GitHub CVE 数据库) |
deno x | 运行 npm / JSR 包的二进制(类似 npx);可 deno x --install-alias 安装 dx 别名 |
五、配置文件 (deno.json)
Deno 使用 deno.json(或 deno.jsonc)管理项目配置,类似于 package.json,但不依赖 node_modules。
{
"name": "my-app",
"version": "1.0.0",
"exports": "./mod.ts",
"imports": {
"jsr:@std/http": "jsr:@std/http@1.0.0",
"npm:express": "npm:express@4"
},
"tasks": {
"dev": "deno run --allow-net --watch main.ts",
"test": "deno test --allow-net"
},
"lint": {
"include": ["src/"],
"exclude": ["src/testdata/"]
}
}
imports:映射别名,简化导入路径。tasks:定义自定义命令,通过deno task <name>执行。lint:配置deno lint的行为。
执行 deno task dev 即可运行开发任务。
六、总结
| 概念 | 说明 |
|---|---|
| 依赖管理方式 | 以 deno.json + URL / JSR / npm 为主;可选 package.json(Node 兼容) |
| 标准库 | 固定版本引入,部分依赖 unstable API 需 --unstable |
| 配置文件 | deno.json 管理 imports、tasks、lint 等 |
| 关键命令 | deno add、deno install、deno outdated、deno audit、deno x |
Deno 的包管理更现代化、安全性更高,尤其适合需要严格依赖控制和最小权限的场景。
参考文献
| 资料 | 说明 |
|---|---|
| deno.json | 项目配置 |
| JSR | JavaScript Registry |
| npm specifiers | npm: 导入 |
| Dependencies | deno add / 缓存 |
相关文章
Deno 基础
Deno 是基于 V8 与 Rust 的 JavaScript/TypeScript 运行时,由 Node.js 原作者 Ryan Dahl 发起。官方文档:docs.deno.com。与 Node、Bun 的对比见 运行时对比。
内置工具链
Deno 提供了开箱即用的工具链,无需安装任何第三方依赖即可完成代码格式化、检查、测试、覆盖率、文档生成和基准测试等任务。
项目初始化与基础命令
Deno 提供了开箱即用的项目管理工具集,无需额外配置即可初始化项目、运行脚本、执行代码片段等。
其他配置
Deno 默认禁止访问环境变量,以遵循最小权限原则。必须通过 --allow-env 标志显式开启。
权限模型
Deno 默认在安全的沙盒环境中执行任何代码——无论是你的主程序还是第三方依赖,都没有文件、网络、环境变量或子进程的访问权限。只有通过 命令行标志显式授予 的权限才能被使用。
安装与环境
Deno 提供了多种安装方式,覆盖主流操作系统。安装后需确保环境 PATH 正确,并可配置一些环境变量以控制行为。