Derived Modular Arch
开始

快速开始

安装 CLI、用 dma init 引导布局、运行 dma check,并接入 CI。

从空项目或现有项目到可用的 DMA 强制校验,最短路径如下。假设是带 src/ 的 TypeScript 应用(或通过 init 创建)。

在用 AI agent?复制提示词——它会为你的仓库建议 skill 安装、dma init 和验证步骤。

1. 安装 CLI

npm install -D @derived-modular/cli

2. 引导布局

应用包 目录下执行(monorepo 中是 apps/web,不是 workspace 根目录):

npx @derived-modular/cli init .

init 对现有项目安全——严格跳过,从不覆盖:

缺失则创建跳过
src/features/shared/已有文件和文件夹
app/——除非已有 pages/routes/dma.config.*scripts.dmaAGENTS.md 标记
dma.config.tspackage.json 中的 scripts.dmaLint 配置
AGENTS.md 中的 DMA 块(仅追加)services/

结果目录树(最小):

src/
├── app/          # or pages/, routes/ — composition root for your framework
├── features/
└── shared/

不要 提前创建 services/——在 另一个模块 首次导入该代码时才会出现。

更多:dma init · 项目布局

想手动布局?自己创建相同文件夹即可。可选 dma.config.* —— dma.config

3. 从组合根(composition root)挂载 feature

组合根 通过 public/ 导入模块:

// src/app/page.tsx
import { CatalogPage } from "@/features/catalog/public/catalog-page";
import { CheckoutPage } from "@/features/checkout/public/checkout-page";

export default function Page() {
  return (
    <div>
      <CatalogPage />
      <CheckoutPage />
    </div>
  );
}

feature 可以拉取 services/*/public/*shared/,但不能拉其他 feature。在线示例——examples/next-app

4. 运行检查

npx @derived-modular/cli check .

单个带 src/ 的应用——一张导入图(import graph)。monorepo 根目录没有 src/——CLI 会发现应用(或用 --roots)。每个 root 是 独立 的图。

常见首批错误:

规则发生了什么怎么办
public-api导入进了 features/foo/model,而不是 public/public/ 导出符号,或从那里导入
feature-to-featureFeature A 导入 feature B提升到 services/,或抽到 shared/(second use)
layer-direction导入「向上」,例如从 sharedfeatures反转依赖方向

全部规则——dma check。Monorepo——Monorepo 指南

5. 加入 CI

npx @derived-modular/cli check . --format json

更多——CI

6.(可选)编辑器中的 linter

保存时快速反馈——不能 替代 dma check

npm install -D @derived-modular/eslint-plugin eslint
// eslint.config.js
import dma from "@derived-modular/eslint-plugin";

export default [
  ...dma.configs.recommended,
  {
    settings: {
      dma: {
        srcRoot: "src",
        compositionRoots: ["app", "pages", "routes"],
      },
    },
  },
];

未设置 settings.dma 时,ESLint 可从 dma.config.* 软加载 srcRoot / compositionRoots。配置——ESLint

7. 本地成长信号

npx @derived-modular/cli doctor .

doctor 不会让 CI 失败(exit 0),但会提示何时抽到 shared、拆分 segment,或将 feature 提升为 service。更多——dma doctor

下一步

On this page