同一模板,生成不同版本

公共代码只维护一份,基础版和团队版的区别交给配置处理。

同一模板,生成不同版本

基础版和团队版共用同一套代码,区别在于是否包含统计模块。分别维护模板时,公共代码的修改需要同步到两份源码。

示例保留一份完整源码,通过两份 Preset 生成不同版本:basic.json 排除统计文件并删除入口中的相关代码,team.json 保留统计功能。

starter/src/main.ts

import { track } from './analytics'
 
track('app-started')
console.log('Hello')

创建命令

Bash
pnpm create preset init my-basic-app --from ./presets/basic.json

模板差异配置

两份配置都从 starter 目录取文件。基础版多做两步:

  • 用 exclude 排除 src/analytics.ts。
  • 用 replace 删除 src/main.ts 中的导入和调用,避免入口继续引用已删除的文件。

团队版保留这两个文件。两个版本的 package.json 都会按目标目录更新 name,分别变成 my-basic-app 和 my-team-app。

公共代码在源仓库中维护,创建项目时应用对应配置。已经生成的项目需要自行更新。

文本替换规则

replace 按原文精确匹配。入口代码修改后,需要同步检查配置中的 from;找不到对应文本时,创建会报错。

这类配置适合少量、明确的文件差异。删除文件后,相关引用也需要通过配置移除。CLI 不会自动分析引用关系或转换 TypeScript。

更多操作见Preset 配置。