Deno单仓中deps.ts应按工作区单独配置还是全局共享?
Deno Monorepo 中 deps.ts 的放置策略
在Deno monorepo架构下,deps.ts的放置没有绝对标准答案,核心是在依赖集中管理和模块独立性之间找到平衡,以下是几种可行方案及适用场景:
方案1:根目录统一维护 deps.ts(适合依赖高度一致的项目)
如果所有模块依赖的版本、包基本一致,完全可以在根目录(如src/deps.ts)集中管理,通过Deno的导入映射优化路径问题,避免冗长的相对路径:
- 在项目根目录创建
import_map.json配置路径别名:
{ "imports": { "@/deps": "./src/deps.ts" } }
- 在每个模块的
deno.jsonc中引入该导入映射:
{ "importMap": "../../import_map.json" }
- 模块内导入时直接使用别名:
import { jose } from "@/deps";
这种方式既保留了依赖集中管理的优势,又通过配置优化了路径,不会破坏模块的逻辑独立性。
方案2:每个模块独立维护 deps.ts(适合模块依赖差异大的场景)
如果不同模块依赖的包版本差异明显,或部分模块仅需少量特定依赖,分散维护deps.ts更合理:
- 每个模块的
deps.ts仅导出自身需要的依赖,避免冗余包引入 - 可在根目录创建
root_deps.ts存放所有模块共用的基础依赖,模块的deps.ts从根目录导入共用部分,再补充独有依赖:
// src/modules/first/deps.ts export { jose, assertEquals } from "../../root_deps.ts"; export { someUniqueDep } from "https://deno.land/x/unique_dep@v1.0.0/mod.ts";
这种模式兼顾了部分依赖的集中管理,又给单个模块足够的独立性。
方案3:混合模式(推荐大多数项目使用)
结合前两种方案的优势:
- 根目录维护
shared_deps.ts,存放所有模块共用的核心依赖(如测试工具、常用工具库) - 每个模块的
deps.ts优先从shared_deps.ts导入共用部分,再单独引入自身需要的特殊依赖 - 搭配导入映射优化路径,让模块内导入更简洁
总结
- 若项目所有模块依赖高度统一,优先选根目录统一维护+导入映射的方案
- 若模块依赖差异大,选分散维护+根目录共享基础依赖的模式
- 不必为了“纯模块化”放弃依赖集中管理的便利性,也不要为了集中管理强行引入冗余依赖,按需选择即可
内容的提问来源于stack exchange,提问作者hallvors
相关产品推荐
相关产品推荐

