diff --git a/packages/vant-cli/generators/.eslintignore b/packages/vant-cli/generators/.eslintignore
new file mode 100644
index 000000000..c05831264
--- /dev/null
+++ b/packages/vant-cli/generators/.eslintignore
@@ -0,0 +1,4 @@
+es
+lib
+dist
+node_modules
diff --git a/packages/vant-cli/generators/.gitignore b/packages/vant-cli/generators/.gitignore
new file mode 100644
index 000000000..8159d27da
--- /dev/null
+++ b/packages/vant-cli/generators/.gitignore
@@ -0,0 +1,17 @@
+*.log*
+.cache
+.DS_Store
+.idea
+.vscode
+
+# npm
+node_modules
+package-lock.json
+
+# dist file
+es
+lib
+site
+
+# test
+test/coverage
diff --git a/packages/vant-cli/generators/babel.config.js b/packages/vant-cli/generators/babel.config.js
new file mode 100644
index 000000000..27fec6e80
--- /dev/null
+++ b/packages/vant-cli/generators/babel.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ presets: ['@vant/cli/preset']
+};
diff --git a/packages/vant-cli/generators/docs/home.md b/packages/vant-cli/generators/docs/home.md
new file mode 100644
index 000000000..3c7c761b5
--- /dev/null
+++ b/packages/vant-cli/generators/docs/home.md
@@ -0,0 +1,11 @@
+# 介绍
+
+### 关于
+
+这是一段组件库的介绍
+
+### 特性
+
+- 特性一
+- 特性二
+- 特性三
diff --git a/packages/vant-cli/generators/docs/quickstart.md b/packages/vant-cli/generators/docs/quickstart.md
new file mode 100644
index 000000000..5c48a838c
--- /dev/null
+++ b/packages/vant-cli/generators/docs/quickstart.md
@@ -0,0 +1,15 @@
+# 快速上手
+
+### 安装
+
+```bash
+# 通过 npm 安装
+npm i vant -S
+
+# 通过 yarn 安装
+yarn add vant
+```
+
+### 引入组件
+
+这是一段引入组件的介绍
diff --git a/packages/vant-cli/generators/package.json b/packages/vant-cli/generators/package.json
new file mode 100644
index 000000000..55f7e1034
--- /dev/null
+++ b/packages/vant-cli/generators/package.json
@@ -0,0 +1,68 @@
+{
+ "name": "@youzan/demo-ui",
+ "version": "1.0.0",
+ "description": "",
+ "main": "lib/demo-ui.js",
+ "style": "lib/demo-ui.css",
+ "files": [
+ "lib",
+ "es"
+ ],
+ "scripts": {
+ "dev": "vant-cli dev",
+ "test": "vant-cli test",
+ "lint": "vant-cli lint",
+ "build": "vant-cli build",
+ "release": "vant-cli release",
+ "test:coverage": "open test/coverage/index.html",
+ "build-site": "vant-cli build-site && gh-pages -d site"
+ },
+ "author": "",
+ "license": "MIT",
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged",
+ "commit-msg": "vant-cli commit-lint"
+ }
+ },
+ "lint-staged": {
+ "*.{ts,tsx,js,jsx,vue}": [
+ "eslint --fix",
+ "git add"
+ ],
+ "*.{vue,css,less,scss}": [
+ "stylelint --fix",
+ "git add"
+ ]
+ },
+ "peerDependencies": {
+ "vant": "^2.2.16",
+ "vue": "^2.6.11",
+ "vue-template-compiler": "^2.6.11"
+ },
+ "devDependencies": {
+ "@vant/cli": "^2.0.0",
+ "babel-plugin-import": "^1.13.0",
+ "vant": "^2.2.16",
+ "vue": "^2.6.11",
+ "vue-template-compiler": "^2.6.11"
+ },
+ "eslintConfig": {
+ "root": true,
+ "extends": [
+ "@vant"
+ ]
+ },
+ "stylelint": {
+ "extends": [
+ "@vant/stylelint-config"
+ ]
+ },
+ "prettier": {
+ "singleQuote": true
+ },
+ "browserslist": [
+ "Android >= 4.0",
+ "iOS >= 8"
+ ]
+}
diff --git a/packages/vant-cli/generators/src/my-button/README.md b/packages/vant-cli/generators/src/my-button/README.md
new file mode 100644
index 000000000..1272d05a6
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-button/README.md
@@ -0,0 +1,49 @@
+# MyButton 按钮
+
+### 介绍
+
+MyButton 是一个示例按钮组件
+
+### 引入
+
+``` javascript
+import Vue from 'vue';
+import { MyButton } from 'demo-ui';
+
+Vue.use(MyButton);
+```
+
+## 代码演示
+
+### 基础用法
+
+```html
+
+```
+
+### 自定义颜色
+
+```html
+
+```
+
+## API
+
+### Props
+
+| 参数 | 说明 | 类型 | 默认值 | 版本 |
+|------|------|------|------|------|
+| type | 按钮类型 | *string* | `primary` | - |
+| color | 按钮颜色 | *string* | - | 1.0.0 |
+
+### Events
+
+| 事件名 | 说明 | 回调参数 |
+|------|------|------|
+| click | 点击时触发 | event: Event |
+
+### Slots
+
+| 名称 | 说明 |
+|------|------|
+| default | 默认插槽 |
diff --git a/packages/vant-cli/generators/src/my-button/demo/index.vue b/packages/vant-cli/generators/src/my-button/demo/index.vue
new file mode 100644
index 000000000..6592a3f95
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-button/demo/index.vue
@@ -0,0 +1,11 @@
+
+
+
+ 按钮
+
+
+
+ 按钮
+
+
+
diff --git a/packages/vant-cli/generators/src/my-button/index.less b/packages/vant-cli/generators/src/my-button/index.less
new file mode 100644
index 000000000..6446ebfd4
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-button/index.less
@@ -0,0 +1,3 @@
+.test {
+ color: red;
+}
diff --git a/packages/vant-cli/generators/src/my-button/index.vue b/packages/vant-cli/generators/src/my-button/index.vue
new file mode 100644
index 000000000..b3857983d
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-button/index.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
diff --git a/packages/vant-cli/generators/src/my-button/test/__snapshots__/index.spec.js.snap b/packages/vant-cli/generators/src/my-button/test/__snapshots__/index.spec.js.snap
new file mode 100644
index 000000000..15814b52e
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-button/test/__snapshots__/index.spec.js.snap
@@ -0,0 +1,3 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`render demo button 1`] = ``;
diff --git a/packages/vant-cli/generators/src/my-button/test/index.spec.js b/packages/vant-cli/generators/src/my-button/test/index.spec.js
new file mode 100644
index 000000000..87c961d6c
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-button/test/index.spec.js
@@ -0,0 +1,7 @@
+import { mount } from '@vue/test-utils';
+import DemoButton from '..';
+
+test('render demo button', () => {
+ const wrapper = mount(DemoButton);
+ expect(wrapper).toMatchSnapshot();
+});
diff --git a/packages/vant-cli/generators/src/my-button/utils.ts b/packages/vant-cli/generators/src/my-button/utils.ts
new file mode 100644
index 000000000..e5bd111b4
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-button/utils.ts
@@ -0,0 +1,3 @@
+export function foo() {
+ return 'bar';
+}
diff --git a/packages/vant-cli/generators/src/my-cell/README.md b/packages/vant-cli/generators/src/my-cell/README.md
new file mode 100644
index 000000000..5299a4830
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-cell/README.md
@@ -0,0 +1,49 @@
+# MyCell 单元格
+
+### 介绍
+
+MyCell 是一个示例单元格组件
+
+### 引入
+
+``` javascript
+import Vue from 'vue';
+import { MyCell } from 'demo-ui';
+
+Vue.use(MyCell);
+```
+
+## 代码演示
+
+### 基础用法
+
+```html
+
+```
+
+### 显示箭头
+
+```html
+
+```
+
+## API
+
+### Props
+
+| 参数 | 说明 | 类型 | 默认值 | 版本 |
+|------|------|------|------|------|
+| title | 单元格标题 | *string* | `-` | - |
+| is-link | 是否为可点击单元格 | *boolean* | `false` | - |
+
+### Events
+
+| 事件名 | 说明 | 回调参数 |
+|------|------|------|
+| click | 点击时触发 | event: Event |
+
+### Slots
+
+| 名称 | 说明 |
+|------|------|
+| default | 默认插槽 |
diff --git a/packages/vant-cli/generators/src/my-cell/demo/index.vue b/packages/vant-cli/generators/src/my-cell/demo/index.vue
new file mode 100644
index 000000000..3b6d6ab9a
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-cell/demo/index.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vant-cli/generators/src/my-cell/index.jsx b/packages/vant-cli/generators/src/my-cell/index.jsx
new file mode 100644
index 000000000..8ea9d7833
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-cell/index.jsx
@@ -0,0 +1,14 @@
+import { Cell } from 'vant';
+
+export default {
+ name: 'my-cell',
+
+ props: {
+ title: String,
+ isLink: Boolean
+ },
+
+ render() {
+ return | ;
+ }
+};
diff --git a/packages/vant-cli/generators/src/my-cell/index.less b/packages/vant-cli/generators/src/my-cell/index.less
new file mode 100644
index 000000000..4db6e9469
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-cell/index.less
@@ -0,0 +1,8 @@
+.my-cell {
+ padding: 16px;
+ font-weight: 500;
+
+ .van-cell__value {
+ color: #333;
+ }
+}
diff --git a/packages/vant-cli/generators/src/my-icon/README.md b/packages/vant-cli/generators/src/my-icon/README.md
new file mode 100644
index 000000000..7fe23619a
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-icon/README.md
@@ -0,0 +1,37 @@
+# MyIcon 图标
+
+### 介绍
+
+MyIcon 是一个示例图标组件
+
+### 引入
+
+``` javascript
+import Vue from 'vue';
+import { MyIcon } from 'demo-ui';
+
+Vue.use(MyIcon);
+```
+
+## 代码演示
+
+### 基础用法
+
+```html
+
+```
+
+### 显示箭头
+
+```html
+
+```
+
+## API
+
+### Props
+
+| 参数 | 说明 | 类型 | 默认值 | 版本 |
+|------|------|------|------|------|
+| name | 图标名称 | *string* | `-` | - |
+| dot | 是否展示红点 | *boolean* | `false` | - |
diff --git a/packages/vant-cli/generators/src/my-icon/demo/index.vue b/packages/vant-cli/generators/src/my-icon/demo/index.vue
new file mode 100644
index 000000000..789fca4a5
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-icon/demo/index.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/vant-cli/generators/src/my-icon/index.jsx b/packages/vant-cli/generators/src/my-icon/index.jsx
new file mode 100644
index 000000000..d00b0bb8f
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-icon/index.jsx
@@ -0,0 +1,14 @@
+import { Icon } from 'vant';
+
+export default {
+ name: 'my-icon',
+
+ props: {
+ name: String,
+ dot: Boolean
+ },
+
+ render() {
+ return ;
+ }
+};
diff --git a/packages/vant-cli/generators/src/my-icon/index.less b/packages/vant-cli/generators/src/my-icon/index.less
new file mode 100644
index 000000000..af143f320
--- /dev/null
+++ b/packages/vant-cli/generators/src/my-icon/index.less
@@ -0,0 +1,3 @@
+.my-icon {
+ font-size: 32px;
+}
diff --git a/packages/vant-cli/generators/src/style/base.less b/packages/vant-cli/generators/src/style/base.less
new file mode 100644
index 000000000..880da5087
--- /dev/null
+++ b/packages/vant-cli/generators/src/style/base.less
@@ -0,0 +1,5 @@
+@import "./var.less";
+
+body {
+ color: @text-color;
+}
diff --git a/packages/vant-cli/generators/src/style/var.less b/packages/vant-cli/generators/src/style/var.less
new file mode 100644
index 000000000..f636b24d8
--- /dev/null
+++ b/packages/vant-cli/generators/src/style/var.less
@@ -0,0 +1,2 @@
+@primary-color: #f44;
+@text-color: #4a4a4a;
diff --git a/packages/vant-cli/generators/vant.config.js b/packages/vant-cli/generators/vant.config.js
new file mode 100644
index 000000000..5214c8a26
--- /dev/null
+++ b/packages/vant-cli/generators/vant.config.js
@@ -0,0 +1,49 @@
+module.exports = {
+ name: 'demo-ui',
+ build: {
+ site: {
+ publicPath: '/demo-ui/'
+ }
+ },
+ site: {
+ title: 'Demo UI',
+ logo: 'https://img.yzcdn.cn/vant/logo.png',
+ nav: [
+ {
+ title: '开发指南',
+ items: [
+ {
+ path: 'home',
+ title: '介绍'
+ },
+ {
+ path: 'quickstart',
+ title: '快速上手'
+ }
+ ]
+ },
+ {
+ title: '基础组件',
+ items: [
+ {
+ path: 'my-button',
+ title: 'MyButton 按钮'
+ },
+ {
+ path: 'my-icon',
+ title: 'MyIcon 图标'
+ }
+ ]
+ },
+ {
+ title: '展示组件',
+ items: [
+ {
+ path: 'my-cell',
+ title: 'MyCell 单元格'
+ }
+ ]
+ }
+ ]
+ }
+};