UNPKG

@twotwoba/vv-cli

Version:

Easily create Vite + React19/Vue3 web/h5/mini-program/chrome-extension projects.

270 lines (212 loc) 7.55 kB
# UI Component Library Template - Project Summary ## 🎯 Overview This is a production-ready template for building Vue 3 UI component libraries, similar to Element Plus and Ant Design Vue. It uses: - **Vite 8** (with Rolldown beta) for ultra-fast builds - **pnpm workspace** for monorepo management - **TypeScript** for type safety - **Vue 3 Composition API** for modern component development ## 📁 Complete File Structure ``` template-ui-lib/ ├── .npmrc # pnpm configuration ├── LICENSE # MIT License ├── README.md # Main documentation ├── QUICK_START.md # Quick start guide ├── DEVELOPMENT.md # Detailed development guide ├── PROJECT_SUMMARY.md # This file ├── gitignore # Git ignore rules ├── package.json # Root package with scripts ├── pnpm-workspace.yaml # Workspace configuration ├── tsconfig.json # Root TypeScript config ├── packages/ └── components/ # Main component library (publishable) ├── README.md # Library usage documentation ├── package.json # Library package config ├── tsconfig.json # Library TypeScript config ├── vite.config.ts # Vite library mode config └── src/ ├── index.ts # Main entry point ├── button/ ├── button.vue # Button component └── index.ts # Button exports └── input/ ├── input.vue # Input component └── index.ts # Input exports └── playground/ # Development playground ├── .env.dev # Dev environment variables ├── .env.prod # Prod environment variables ├── index.html # HTML entry ├── package.json # Playground package ├── tsconfig.json # Playground TypeScript config ├── vite.config.ts # Playground Vite config ├── public/ └── vite.svg # Vite logo └── src/ ├── main.ts # App entry point ├── style.css # Global styles └── App.vue # Demo application ``` ## 🔑 Key Features ### 1. Vite 8 with Rolldown (Beta) The template uses Vite 8's new Rolldown bundler for: - ⚡️ Faster builds (10x faster than Rollup) - 🎯 Better tree-shaking - 📦 Smaller bundle sizes - 🔧 Native Rust performance ### 2. Library Mode Configuration The `vite.config.ts` in `packages/components` is configured for library building: ```typescript build: { lib: { entry: { /* multiple entry points */ }, formats: ['es', 'cjs'] }, rolldownOptions: { external: ['vue'], output: [ { format: 'es', dir: 'es', preserveModules: true }, { format: 'cjs', dir: 'lib', preserveModules: true } ] } } ``` This generates: - **ES modules** (`es/`) for modern bundlers (tree-shakable) - **CommonJS** (`lib/`) for older tools - **Type definitions** (`.d.ts`) for TypeScript support ### 3. Package.json Exports The library's `package.json` uses modern exports field: ```json { "exports": { ".": { "types": "./es/index.d.ts", "import": "./es/index.mjs", "require": "./lib/index.js" }, "./button": { /* individual component export */ }, "./input": { /* individual component export */ } } } ``` This enables: - Full import: `import UI from 'your-lib'` - On-demand import: `import { Button } from 'your-lib'` - Direct import: `import Button from 'your-lib/button'` ### 4. Monorepo Structure Using pnpm workspace for: - 🔗 Shared dependencies - 🚀 Fast installs with hard links - 📦 Workspace protocol (`workspace:*`) - 🎯 Isolated package management ### 5. Development Playground The playground package: - Uses the library via `workspace:*` dependency - Provides hot module replacement (HMR) - Allows real-time component testing - Serves as living documentation ## 🚀 Available Scripts ### Root Level ```bash pnpm dev # Start playground dev server pnpm build # Build component library pnpm build:all # Build all packages pnpm type-check # Run TypeScript checks pnpm clean # Clean all build outputs ``` ### Component Library ```bash cd packages/components pnpm dev # Watch mode build pnpm build # Production build pnpm type-check # Type checking ``` ## 📦 Build Output After running `pnpm build`, the library generates: ``` packages/components/ ├── es/ # ES modules ├── index.mjs ├── index.d.ts ├── button/ ├── index.mjs ├── index.d.ts └── button.vue.d.ts └── input/ ├── index.mjs ├── index.d.ts └── input.vue.d.ts └── lib/ # CommonJS ├── index.js ├── button/ └── index.js └── input/ └── index.js ``` ## 🎨 Component Structure Each component follows this pattern: ``` component-name/ ├── component-name.vue # Component implementation └── index.ts # Exports and install function ``` The `index.ts` provides: - Named export: `export { ComponentName }` - Default export: `export default ComponentName` - Type export: `export type { ComponentNameProps }` - Install function for Vue.use() ## 📝 Usage After Publishing ### Installation ```bash npm install your-ui-library ``` ### Full Import ```typescript import { createApp } from 'vue' import YourUI from 'your-ui-library' app.use(YourUI) ``` ### On-Demand Import ```typescript import { Button, Input } from 'your-ui-library' ``` ### Direct Import (Best for Tree-Shaking) ```typescript import Button from 'your-ui-library/button' import Input from 'your-ui-library/input' ``` ## 🔧 Customization 1. **Update package name**: Edit `packages/components/package.json` 2. **Add components**: Follow the Button/Input pattern 3. **Customize styles**: Modify component `.vue` files 4. **Add build plugins**: Update `vite.config.ts` 5. **Configure TypeScript**: Adjust `tsconfig.json` files ## 📚 Documentation Files - **README.md**: Overview and basic usage - **QUICK_START.md**: Step-by-step getting started guide - **DEVELOPMENT.md**: Detailed development workflow - **packages/components/README.md**: Library API documentation ## 🎯 Best Practices Implemented 1. TypeScript for type safety 2. Scoped styles to prevent conflicts 3. Component naming with `Ui` prefix 4. Props interfaces with TypeScript 5. Proper event typing with `defineEmits` 6. Tree-shakable exports 7. Separate CSS for each component 8. Full type definitions 9. Modern package.json exports 10. Monorepo for better organization ## 🚀 Next Steps 1. Install dependencies: `pnpm install` 2. Start development: `pnpm dev` 3. Add your components 4. Build: `pnpm build` 5. Publish: `npm publish` Enjoy building your UI library! 🎉