create-vue-workspace

Scaffold a Vue 3 pnpm monorepo (apps/* + packages/*) with independently publishable component packages.
312
Install
npm install create-vue-workspace
Latest Version:0.1.1
License:MIT
Last Updated:Sep 11, 2026
Links: npm
Maintainer: hxling

create-vue-workspace

一个可发布到 npm 的 CLI,用于生成 Vue 3 + Vite + TypeScript 的 pnpm monorepo 工作区,并以 Angular CLI 风格的 new + generate 命令持续生成代码。

命令别名:cvw(对应 create-vue-workspace)

命令模型

对齐 Angular CLI 的两段式:new 建工作区,generate 跑生成器。

cvw new [name]                  # 创建工作区
cvw generate <type> [name]      # 运行生成器,别名 cvw g
cvw update                      # 更新 cvw 自身到最新版本

生成器

type 别名 产物 关键选项
component c packages/<name>/ 独立组件包,并自动接线聚合包 --aggregator(默认 ui)、--with-sub、--skip-tests
package pkg packages/<name>/ 通用包骨架 --vue(附带 vue 依赖)
hook h <pkg>/src/composition/use-<name>.ts,并追加 re-export --pkg(默认 hooks)
view v apps/<app>/src/views/<name>.vue,并自动注册路由 --app(默认 web)、--route、--skip-route
util u <pkg>/src/<name>.ts,并追加 re-export --pkg(默认 utils)
app a / application apps/<name>/ 新应用,并维护根 scripts 与 changeset ignore --port、--template(默认 web)、--ui

所有生成器通用:--dry-run(只打印将生成的文件,不落盘)、-y/--yes(非交互)。

快速开始

# 创建工作区
pnpm create vue-workspace my-app
# 或
npx create-vue-workspace@latest my-app

cd my-app
pnpm install
pnpm dev

# 生成代码
cvw g c button            # 独立组件包,自动接线 packages/ui
cvw g pkg hooks --vue     # 通用包
cvw g h theme --pkg hooks # composable
cvw g u array             # 工具函数模块
cvw g v user/list         # 页面 + 自动注册路由
cvw g app admin --port 5174

cvw new 选项

参数 说明 默认值
--scope <@xxx> 生成物的包 scope 由目录名推导,如 @my-app
--packages <list> 初始创建的 packages,逗号分隔 ui,utils
--ui <farris|none> 是否引入 @farris/ui-vue farris
--port <port> 应用开发端口 5173
--skip-install 跳过依赖安装 —
--skip-git 跳过 git 初始化 —
--dry-run 只打印将生成的文件,不落盘 —
-y, --yes 全部使用默认值,非交互(适合 CI) —

交互式

省略参数时会像 Angular CLI 一样追问,-y 下则直接报错:

cvw g            # 追问:选择生成器
cvw g c          # 追问:组件名称
cvw new          # 追问:工程信息
cvw g list       # 打印生成器清单

自更新

cvw update                  # 检查并升级到最新版本(会先询问确认)
cvw update --check          # 只检查,不升级
cvw update -y               # 不询问,直接升级
cvw update --manager pnpm   # 指定包管理器
参数 说明
--check 只检查是否有新版本
--manager <npm|pnpm|yarn|bun> 指定用于升级的包管理器
-y, --yes 不询问,直接升级

说明:

  • 升级的是 CLI 自身,不会改动已生成的工程
  • 通过 npx / pnpm dlx 临时运行时会提示「无需手动更新」(这类方式每次都拉取最新版)
  • 安装方式由可执行文件路径推断(识别 pnpm / yarn / bun 的特征目录),推断不出时回退 npm;实际执行的命令会先打印出来,避免装错位置

名称归一化

输入 Button / button / input_group 都会被归一化:目录 button、组件名 FButton、选择器 f-button、组件文件 components/button.component.tsx。

cvw g h use-theme 与 cvw g h theme 等价(自动去掉 use 前缀)。

错误处理

  • 生成器目标已存在 → 报错并退出(退出码 1)
  • hook / util 的目标包不存在 → 报错并提示先执行 cvw g pkg <name>
  • view 找不到 // cvw:routes 锚点 → 跳过路由注册并提示手写

生成物结构

my-app/
├── apps/
│   └── web/                    # @my-app/web,private,永不发包
│       └── src/
├── packages/
│   ├── ui/                     # @my-app/ui,组件聚合包
│   ├── utils/                  # @my-app/utils,纯 TS 工具
│   └── button/                 # cvw g c 生成,独立组件包
│       ├── index.ts            # 入口:导出组件与 props 类型
│       ├── components/         # 组件实现
│       │   ├── button.component.tsx
│       │   └── button.props.ts
│       ├── composition/        # 可组合逻辑
│       ├── button.scss
│       ├── types.ts
│       ├── __tests__/
│       ├── package.json
│       └── vite.config.ts
├── pnpm-workspace.yaml
├── tsconfig.base.json
└── .changeset/

组件骨架基于《Farris UI Vue 组件开发规范》,并按本仓库约定调整:组件实现(<name>.component.tsx、<name>.props.ts)统一放在 components/ 下,与 composition/、__tests__/ 平级;样式 <name>.scss 保留在组件包根目录。组件名 F 前缀、选择器 f- 前缀。

开发约定

  • 内部包引用一律使用 workspace:*,不要写死版本号
  • 应用通过 Vite alias 直连 packages/*/src 源码,改库无需重新构建
  • 依赖方向单向:utils -> 组件包 -> ui -> apps,禁止反向依赖
  • apps/* 已在 .changeset/config.json 中 ignore,不会参与发布

版本管理与发布

pnpm changeset           # 记录变更
pnpm version-packages    # 升版本、生成 CHANGELOG
pnpm release             # 构建并发布到 npm

本地开发(本仓库)

pnpm install
pnpm dev       # 直接运行 CLI(tsx)
pnpm play      # 生成一份真实产物到 playground/ 预览(覆盖全部生成器)
pnpm test      # 单元测试
pnpm typecheck # 类型检查
pnpm build     # unbuild -> dist

发布本 CLI

采用「构建 + 收集」两段式:npm run build 先产出 CLI,再把发包所需文件收集到 dist/create-vue-workspace/,形成一个自包含的可发布包。

dist/create-vue-workspace/
├── package.json      # 已裁剪:无 scripts / devDependencies / private
├── README.md
├── LICENSE
├── dist/index.mjs    # CLI 产物
└── templates/        # 全部模板

发布:

npm login                          # 首次发布需先登录
npm run build                      # unbuild + 收集到 dist/create-vue-workspace/
cd dist/create-vue-workspace
npm pack --dry-run                 # 自检:应只含 dist/ + templates/ + README + LICENSE + package.json
npm publish

或一步到位(先构建再发布):

npm run publish:dist

约定与注意事项:

  • 仓库根 package.json 标记了 private: true,表明它本身不是对外发布的包;请始终从 dist/create-vue-workspace/ 发布
  • 升版本在仓库根执行 npm version patch|minor|major,再重新 npm run build
  • 暂存目录由每次 npm run build 重建(unbuild 会先清空 dist/),因此发布前务必先 build,避免发出陈旧产物
  • 若改为 scoped 包名,需保留 publishConfig.access: "public"

本 CLI 仓库自身未接入 changesets(changesets 只出现在生成物模板中),版本号由 npm version 手动维护。

Related Packages

@duxweb/dvha-template

Create DVHA project from template

6,499
create-swdg-frontend

Scaffold a new SWDG frontend project

1,414
create-vue_zx

Vue 3 + Vite 标准化脚手架 — 快速搭建 Vue 3 项目开发环境

1,457
@moluoxixi/create-app

Create supported Vite projects with an atomic layered architecture

4,573 0
create-vuno

Create a ready-to-run Vuno application.

875

Version History

Version Released License
0.1.1 MIT
0.1.0 MIT