Skip to main content
On this page

添加和移除依赖

Deno 通过项目的 deno.json import map,或者在你有 package.json 时通过它来管理依赖。deno adddeno remove 命令会替你编辑这些文件,而带包参数的 deno install 也会执行同样的操作。

添加包 Jump to heading

未带前缀的包名会被视为 npm 包。对 JSR 包请使用 jsr: 前缀:

>_
$ deno add express jsr:@std/path
Add npm:express@5.2.1
Add jsr:@std/path@1.1.5

deno install express 是等价的:它会以相同方式记录依赖,并在一步中完成全部安装。

这两者最终都会进入 deno.jsonimports 映射,使用与 semver 兼容的 caret 范围:

deno.json
{
  "imports": {
    "@std/path": "jsr:@std/path@^1.1.5",
    "express": "npm:express@^5.2.1"
  }
}

在项目中的任何地方,都可以通过它们的裸名称导入:

import express from "express";
import { join } from "@std/path";

如果要固定为精确版本而不是 caret 范围,请传入 --save-exact。如果要指定特定版本或标签,请直接写出来:

>_
deno add --save-exact npm:express@4.21.2
deno add npm:typescript@next

依赖写入的位置 Jump to heading

如果项目包含 package.json,npm 包会被添加到其中的 dependencies,而不是 deno.json,这在与 Node.js 工具链共享的项目中很方便。你可以使用 --package-json 强制这样做。

开发依赖只存在于 package.json 体系中:

>_
deno add --dev npm:typescript

Note

如果没有 package.json--dev 标志不会生效:deno.json 只有一个 imports 映射,因此该包会作为普通导入被添加。

为包设置别名 Jump to heading

import map 可以将任意名称映射到任意 specifier。这会以原始名称安装一个 fork,因此现有导入可以继续工作:

deno.json
{
  "imports": {
    "lodash": "npm:lodash-es@^4.17.21"
  }
}

别名也是让同一个包的两个版本并排使用的方式:

deno.json
{
  "imports": {
    "preact": "npm:preact@^10.27.2",
    "preact-canary": "npm:preact@11.0.0-experimental.4"
  }
}

覆盖传递依赖 Jump to heading

import map 只命名你的直接依赖。要强制依赖树中更深层某处的某个包使用特定版本,请使用 package.json 中的 overrides 字段,方式与 npm 相同:

package.json
{
  "dependencies": {
    "debug": "4.4.3"
  },
  "overrides": {
    "ms": "2.1.2"
  }
}

deno install 会将 ms 在出现的所有位置解析为 2.1.2,并将其记录在锁文件中。若要使用包的本地副本进行覆盖,或重新映射你自己的导入而不是依赖树,请参见 覆盖依赖重新映射导入路径

移除包 Jump to heading

deno remove 会按其 import-map 名称删除条目(如果包名不同,则不是包名):

>_
$ deno remove express
Removed express

在你再次运行 deno install 之前,锁文件会保留已移除包的记录;关于 deno.lock 如何跟踪这些内容,请参见 锁文件文档

Did you find what you needed?

编辑此页面
Privacy policy