File: README.md
Vant
Features
- ๐ 1KB Component average size (min+gzip)
- ๐ 80+ High quality components
- ๐ Zero third-party dependencies
- ๐ช 90%+ Unit test coverage
- ๐ช Written in TypeScript
- ๐ Extensive documentation and demos
- ๐ Provide Sketch and Axure design resources
- ๐ญ Support Vue 2 & Vue 3
- ๐ญ Support Nuxt 2 & Nuxt 3, provide Vant Module for Nuxt
- ๐ญ Support Tree Shaking
- ๐ญ Support Custom Theme
- ๐ญ Support Accessibility (still improving)
- ๐ญ Support Dark Mode
- ๐ญ Support SSR
- ๐ Support i18n, built-in 30+ languages
Install
Using npm to install:
# install latest Vant for Vue 3 project
npm i vant
# install Vant 2 for Vue 2 project
npm i vant@latest-v2Using yarn, pnpm, or bun:
# with yarn
yarn add vant
# with pnpm
pnpm add vant
# with Bun
bun add vantScaffold
It is recommended to use Rsbuild to create a scaffold project.
Rsbuild is a build tool based on Rspack, developed by the author of Vant, with first-class build speed and development experience, providing first-priority support for Vant.
You can create a Rsbuild project with the following command:
npm create rsbuild@latestPlease visit the Rsbuild repository for more information.
Quickstart
import { createApp } from 'vue';
// 1. Import the components you need
import { Button } from 'vant';
// 2. Import the components style
import 'vant/lib/index.css';
const app = createApp();
// 3. Register the components you need
app.use(Button);See more in Quickstart.
Browser Support
Vant 2 supports modern browsers and Android >= 4.0ใiOS >= 8.0.
Vant 3/4 supports modern browsers and Chrome >= 51ใiOS >= 10.0 (same as Vue 3).
Official Ecosystem
| Project | Description |
|---|---|
| vant-weapp | WeChat MiniProgram UI |
| vant-demo | Collection of Vant demos |
| vant-cli | Scaffold for UI library |
| vant-icons | Vant icons |
| vant-touch-emulator | Using vant in desktop browsers |
| vant-nuxt | Vant module for Nuxt |
Community Ecosystem
| Project | Description |
|---|---|
| 3lang3/react-vant | React mobile UI Components based on Vant |
| vant-theme | Online theme preview built on Vant UI |
| @antmjs/vantui | Mobile UI Components based on Vant, supporting Taro and React |
| Taroify | Taroify is the Taro version of Vant |
| vant-playground | Vant Playground |
| sfc-playground-vant | Vant Playground |
| vue3-h5-template | Mobile project template based on Vant |
| vue3-vant-mobile | Mobile project template based on Vant, out of the box |
| vscode-common-intellisense | A VS Code extension that provides better intellisense to Vant developers |
| nuxt-vant-mobile | Nuxt โด project template based on Vant, out of the box |
| mobvue | A well-crafted mobile web app template |
Links
Preview
You can scan the following QR code to access the demo๏ผ
Core Team
Core contributors of Vant and Vant Weapp:
| chenjiahan | cookfront | wangnaiyi | pangxie | rex-zsd | nemo-shen |
| Lindysen | JakeLaoyu | landluck | wjw-gavin | inottn | zhousg |
Contribution Guide
Please make sure to read the Contributing Guide before making a pull request.
Start On Web IDE
https://github.dev/youzan/vant
LICENSE
Vant is MIT licensed.
File: packages/vant-use/README.md
Vant Use
Built-in composition APIs of Vant.
Install
# with npm
npm i @vant/use
# with yarn
yarn add @vant/use
# with pnpm
pnpm add @vant/use
# with Bun
bun add @vant/useFile: packages/vant-touch-emulator/README.md
Vant Touch Emulator
ๅจๆก้ข็ซฏไธๆจกๆ็งปๅจ็ซฏ touch ไบไปถ๏ผๅฎ็ฐๆนๅผๆฅ่ชไบ hammerjs/touchemulator.
Install
# with npm
npm i @vant/touch-emulator
# with yarn
yarn add @vant/touch-emulator
# with pnpm
pnpm add @vant/touch-emulator
# with Bun
bun add @vant/touch-emulatorไฝฟ็จๆๅ
็ดๆฅๅจไปฃ็ ไธญๅผๅ ฅๆจกๅๅณๅฏ๏ผๆจกๅไผ่ชๅจๅฎๆๅๅงๅๅนถ็ๆ
import '@vant/touch-emulator';CDN ๅผๅ ฅ
<script src="https://fastly.jsdelivr.net/npm/@vant/touch-emulator"></script>็ฆ็จ touch ๆจกๆ
ๅจๆ ็ญพไธๆทปๅ data-no-touch-simulate ๅฑๆงๅ๏ผๅฏไปฅไฝฟ่ฟไธชๆ ็ญพ๏ผไปฅๅๅฎ็ๅญๅ
็ด ๏ผไธ่งฆๅ touch ๆจกๆไบไปถใ
File: packages/vant-popperjs/README.md
@vant/popperjs
@popperjs/core in commonjs format, added Object.assign polyfill.
Install
# with npm
npm i @vant/popperjs
# with yarn
yarn add @vant/popperjs
# with pnpm
pnpm add @vant/popperjs
# with Bun
bun add @vant/popperjsUsage
Refer
issue: https://github.com/vant-ui/vant/issues/7626
File: packages/vant-icons/README.md
Vant Icons
Install
# with npm
npm i @vant/icons
# with yarn
yarn add @vant/icons
# with pnpm
pnpm add @vant/icons
# with Bun
bun add @vant/iconsDocument
File: packages/vant-compat/README.md
@vant/compat
This package provides Vant 3 compatible behavior for Vant 4 users.
Install
# with npm
npm i @vant/compat
# with yarn
yarn add @vant/compat
# with pnpm
pnpm add @vant/compat
# with Bun
bun add @vant/compatUsage
// Same as Toast in Vant 3
import { Toast } from '@vant/compat';
// Same as Dialog in Vant 3
import { Dialog } from '@vant/compat';
// Same as Notify in Vant 3
import { Notify } from '@vant/compat';
// Same as ImagePreview in Vant 3
import { ImagePreview } from '@vant/compat';File: packages/vant-cli/docs/commands.md
Commands
You can add built-in commands to npm scripts to use it.
// package.json
{
"scripts": {
"dev": "vant-cli dev",
"test": "vant-cli test",
"release": "vant-cli release",
"build-site": "vant-cli build-site"
}
}Additionally, npx can used to be run those commands.
npx vant-cli devdev
Start local dev server for browsering components and demo.
build
Build Vue component library.
Files will be output to es and lib directory. More details directory structure
Please add the followed config to package.json when publish to npm.
// package.json
{
"main": "lib/index.js",
"module": "es/index.js",
"files": ["es", "lib"]
}build-site
Build documentation website. Files will be output to site directory.
release
Publish to npm. build will be automatically execute when run release.
commit-lint
Validate the format of commit message. Need husky to do this.
File: packages/vant-cli/docs/commands.zh-CN.md
ๅฝไปค
Vant CLI ไธญๅ ็ฝฎไบไธ็ณปๅ็ๅฝไปค๏ผๅฏไปฅๅฐๅฝไปคๆทปๅ ๅฐ npm scripts ไธญ่ฟ่กไฝฟ็จใ
// package.json
{
"scripts": {
"dev": "vant-cli dev",
"test": "vant-cli test",
"release": "vant-cli release",
"build-site": "vant-cli build-site"
}
}ไนๅฏไปฅ้่ฟ npm ่ชๅธฆ็ npx ็ดๆฅๆง่กๆไธชๅฝไปค๏ผ
npx vant-cli devdev
่ฟ่กๆฌๅฐๅผๅ็ฏๅขใ
่ฟ่ก dev ๅฝไปคๆถ๏ผVant CLI ไผ้่ฟๅฏๅจไธไธชๆฌๅฐๆๅกๅจ๏ผ็จไบๅจๅผๅ่ฟ็จไธญๅฏนๆๆกฃๅ็คบไพ่ฟ่ก้ข่งใ
build
ๆๅปบ็ปไปถๅบใ
่ฟ่ก build ๅฝไปคไผๅจ es ๅ lib ็ฎๅฝไธ็ๆๅฏ็จไบ็ไบง็ฏๅข็็ปไปถไปฃ็ ๏ผ่ฏฆ่ง ็ฎๅฝ็ปๆใ
ๅๅธ npm ๆถ๏ผ่ฏทๅฐไปฅไธ้
็ฝฎๅ ๅ
ฅๅฐ package.json ไธญ๏ผไฝฟ npm ๅ
่ฝ่ขซๆญฃ็กฎ่ฏๅซ:
// package.json
{
"main": "lib/index.js",
"module": "es/index.js",
"files": ["es", "lib"]
}build-site
ๆๅปบๆๆกฃ็ซ็น๏ผๅจ site ็ฎๅฝ็ๆๅฏ็จไบ็ไบง็ฏๅข็ๆๆกฃ็ซ็นไปฃ็ ใ
release
ๅๅธ็ปไปถๅบ๏ผๅๅธๅไผ่ชๅจๆง่ก build ๅฝไปค๏ผๅนถๆ็ งๆต็จๅๅธ npm ๅ ใ
commit-lint
ๆ ก้ช commit message ็ๆ ผๅผๆฏๅฆ็ฌฆๅ่ง่๏ผ้่ฆ้
ๅ husky ๅจๆไบค commit ๆถ่งฆๅใ
File: packages/vant-cli/docs/config.md
Config
rsbuild.config.mjs
Vant CLI uses Rsbuild to build the documentation site. You can create an Rsbuild configuration file in the same directory as vant.config.mjs. The contents of the file will be automatically read by Vant CLI.
// rsbuild.config.mjs or rsbuild.config.ts
export default {
plugins: [
// Configure Rsbuild plugins
],
dev: {
// Options related to local development
},
html: {
// Options related to HTML generation
},
// Other options
};Please refer to Configure Rsbuild for more information.
vite.config.mjs
Vant Cli uses Vite to build component library code. You can create a Vite configuration file in the same directory as vant.config.mjs. In this file, you can add any Vite configuration.
Please refer to Vite Configuration to learn more.
vant.config.mjs
vant.config.mjs includes bundle and documentation site config. Please create this file and place it in your project root directory. Here is a basic example:
export default {
// component library name
name: 'demo-ui',
// bundle config
build: {
site: {
publicPath: '/demo-ui/',
},
},
// documentation site config
site: {
// title
title: 'Demo UI',
// logo
logo: 'https://fastly.jsdelivr.net/npm/@vant/assets/logo.png',
// description
// left nav
nav: [
{
title: 'example',
items: [
{
path: 'home',
title: 'home',
},
],
},
{
title: 'basic components',
items: [
{
path: 'my-button',
title: 'MyButton',
},
],
},
],
},
};name
- Type:
string - Default:
''
Component library name. kebab-case recommended.
build.css.base
- Type:
string - Default:
'style/base.less'
Global style file path. Support absolute path and relative path both.
Note: relative path is calculated based on src.
module.exports = {
build: {
css: {
base: 'style/global.scss',
},
},
};build.css.preprocessor
- Type:
string - Default:
'less'
CSS preprocessor config, support less and sass. Use less by default.
module.exports = {
build: {
css: {
preprocessor: 'sass',
},
},
};build.css.removeSourceFile
- Type:
boolean - Default:
'false'
Whether to remove the source style files after build.
module.exports = {
build: {
css: {
removeSourceFile: true,
},
},
};build.site.publicPath
- Type:
string - Default:
/
Equivalent to vite build.outDir.
Generally, documentation site will be deployed to subpath of domain. For example: https://my.github.io/demo-ui/, publicPath should be /demo-ui/.
module.exports = {
build: {
site: {
publicPath: '/demo-ui/',
},
},
};build.srcDir
- Type:
string - Default:
src
module.exports = {
build: {
srcDir: 'myDir',
},
};build.namedExport
- Type:
boolean - Default:
false
Should export components by Named Export.
When set to false, export default from 'xxx' will be used to export module.
When set to true, export * from 'xxx' will be used to export all modules and type definition.
build.configureVite
- Type:
(config: InlineConfig): InlineConfig | undefined - Default:
undefined
Custom vite config, requires @vant/cli>= 4.0.0.
module.exports = {
build: {
configureVite(config) {
config.server.port = 3000;
return config;
},
},
};If you need to configure some vite plugins, please create a vite.config.ts file in the same directory of vant.config.mjs, in which you can add any vite configuration (this feature requires @vant/cli 5.1.0).
build.packageManager
- Type:
'npm' | 'yarn' | 'pnpm' | 'bun' - Default:
yarn
npm package manager.
build.bundleOptions
- Type:
BundleOptions[]
Specify the format of the bundled output.
The type of BundleOptions:
type BundleOption = {
// Whether to minify code (Tips: es format output can't be minified by vite)
minify?: boolean;
// Formats, can be set to 'es' | 'cjs' | 'umd' | 'iife'
formats: LibraryFormats[];
// Dependencies to external (Vue is externaled by default)
external?: string[];
};Default value๏ผ
const DEFAULT_OPTIONS: BundleOption[] = [
{
minify: false,
formats: ['umd'],
},
{
minify: true,
formats: ['umd'],
},
{
minify: false,
formats: ['es', 'cjs'],
external: allDependencies,
},
];site.title
- Type:
string - Default:
''
Documentation site title.
site.logo
- Type:
string - Default:
''
Documentation site logo.
site.description
- Type:
string - Default:
''
Documentation site description.
site.nav
- Type:
object[] - Default:
undefined
Documentation site left nav. Each item of nav means a navigation group.
module.exports = {
site: {
nav: [
{
// group title
title: 'Development Guide',
// nav items
items: [
{
// nav router
path: 'home',
// nav title
title: 'title',
// should hide phone emulator(false by default)
hideSimulator: true,
},
],
},
],
},
};site.versions
- Type:
object[] - Default:
undefined
Documentation site muti-version config.
module.exports = {
site: {
versions: [
{
label: 'v1',
link: '/v1/',
},
],
},
};site.baiduAnalytics
- Type:
object - Default:
undefined
Documentation site baidu analysis config. The script of Baidu Statistic will be automatically loaded when build documentation website.
module.exports = {
site: {
baiduAnalytics: {
// ๆๅผ็พๅบฆ็ป่ฎก ->ใ็ฎก็ใ->ใไปฃ็ ่ทๅใ
// find the followed URL: "https://hm.baidu.com/hm.js?xxxxx"
// add `xxxxx` in the seed
seed: 'xxxxx',
},
},
};site.hideSimulator
- Type:
boolean - Default:
false
Should hide phone emulator, false by default.
site.simulator.url
- Type:
string - Default: -
Customize iframe URL.
site.htmlMeta
- Type:
Record<string, string> - Default:
undefined
Customize HTML meta tag, key means name, value means content.
site.headHtml
- Type:
string - Default:
undefined
Insert a custom HTML content in the <head> tag.
site.enableVConsole
- Type:
boolean - Default:
false
Whether to enable vConsole debugging in dev, usually used for mobile debugging.
PostCSS
PostCSS can be configured through the postcss.config.js file in the root directory.
Default Config
PostCSS default config:
module.exports = {
plugins: {
autoprefixer: {},
},
};browserslist
Add browserslist field to package.json file is recommended. It's used by autoprefixer to determine the version of target browser, ensuring compatibility of compiled code.
You can add the following config for mobile:
{
"browserslist": ["Chrome >= 51", "iOS >= 10"]
}