Skip to content

分析结论:两个命令不冲突,它们的复制目标和用途完全不同

以下是详细对比:

📋 对比总表

维度initrelease:prepare
uniapp-components/**/* + uniapp-pro-components/chat/**/*相同
目标多个 example/starter 项目tdesign-uniapp/dist + tdesign-uniapp-chat/dist
用途开发时同步组件到各示例项目发布前构建 npm 包的 dist 产物
_example 处理复制到 pages-more 目录忽略ignore: _example
less 编译✅ 通过 copy()processLess()✅ 相同
黑名单❌ 无✅ 过滤 tsconfig.eslint.json.eslintrc.js

🔍 详细分析

1. init 命令的复制流程

  • 组件源码(包含 _example demo)复制到各 starter 项目中
  • Vue3 CLI 项目的基础设施文件(pages、components、mixins、style)复制到其他 starter 项目
  • _example 目录下的 demo 文件被提取到各项目的 pages-more 目录

2. release:prepare 命令的复制流程

  • 将组件源码复制到 dist 目录,用于 npm 发包
  • 明确排除 _example 目录和黑名单文件
  • 目标路径是 tdesign-uniapp/disttdesign-uniapp-chat/dist

✅ 为什么不冲突

  1. 目标目录完全不同init 写入各 starter 项目(src/_tdesignuni_modules),release:prepare 写入 dist 目录
  2. 文件范围不同init 包含 _example demo 文件,release:prepare 排除了 _example
  3. 额外操作不同init 还有 copyInfra 步骤复制基础设施文件,release:prepare 没有
  4. 两者共用同一个 copy() 函数core.js),但通过不同的 config 参数(targetDirdemoDir)来区分行为

唯一的"重叠"是数据源相同(都读取 uniapp-componentsuniapp-pro-components/chat),但这是合理的——一个是同步到开发环境,一个是打包到发布目录。两个命令可以安全地独立或顺序执行,不会互相覆盖或冲突。