Workspaces

对于包含多个相互依赖包的大型项目,Deno 提供了 Workspaces,统一管理依赖与任务。

定义工作区

在根 deno.json 中用 workspace 字段声明成员目录:

deno.json
{
  "workspace": ["./apps/web", "./packages/core", "./packages/cli"]
}

成员之间互相引用

工作区成员可通过包名直接相互导入,Deno 会自动解析到本地源码:

ts
// apps/web/main.ts
import { run } from "@my/core";

run();
packages/core/deno.json
{
  "name": "@my/core",
  "exports": "./mod.ts"
}

统一安装与运行

在根目录执行一次安装即可为所有成员解析依赖:

sh
deno install   # 解析全部成员的依赖
cd apps/web && deno task dev
与 npm workspaces 互通
Deno 工作区可与现有的 package.json workspaces 协同工作,方便在保留既有工具链的同时逐步迁移。