vant Documentation

A lightweight, customizable Vue UI library for mobile web apps.

24,365 stars TypeScript TypeScript 1 file ยท ~4,545 tokens #components#mobile#ui-kit#ui-library#vant#vue#vue3
RAW Doc

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:

bash
# install latest Vant for Vue 3 project
npm i vant

# install Vant 2 for Vue 2 project
npm i vant@latest-v2

Using yarn, pnpm, or bun:

bash
# with yarn
yarn add vant

# with pnpm
pnpm add vant

# with Bun
bun add vant

Scaffold

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:

bash
npm create rsbuild@latest

Please visit the Rsbuild repository for more information.

Quickstart

js
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

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

shell
# with npm
npm i @vant/use

# with yarn
yarn add @vant/use

# with pnpm
pnpm add @vant/use

# with Bun
bun add @vant/use

File: packages/vant-touch-emulator/README.md

Vant Touch Emulator

ๅœจๆกŒ้ข็ซฏไธŠๆจกๆ‹Ÿ็งปๅŠจ็ซฏ touch ไบ‹ไปถ๏ผŒๅฎž็Žฐๆ–นๅผๆฅ่‡ชไบŽ hammerjs/touchemulator.

Install

shell
# 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

ไฝฟ็”จๆŒ‡ๅ—

็›ดๆŽฅๅœจไปฃ็ ไธญๅผ•ๅ…ฅๆจกๅ—ๅณๅฏ๏ผŒๆจกๅ—ไผš่‡ชๅŠจๅฎŒๆˆๅˆๅง‹ๅŒ–ๅนถ็”Ÿๆ•ˆ

js
import '@vant/touch-emulator';

CDN ๅผ•ๅ…ฅ

html
<script src="https://fastly.jsdelivr.net/npm/@vant/touch-emulator"></script>

็ฆ็”จ touch ๆจกๆ‹Ÿ

ๅœจๆ ‡็ญพไธŠๆทปๅŠ  data-no-touch-simulate ๅฑžๆ€งๅŽ๏ผŒๅฏไปฅไฝฟ่ฟ™ไธชๆ ‡็ญพ๏ผˆไปฅๅŠๅฎƒ็š„ๅญๅ…ƒ็ด ๏ผ‰ไธ่งฆๅ‘ touch ๆจกๆ‹Ÿไบ‹ไปถใ€‚

html

File: packages/vant-popperjs/README.md

@vant/popperjs

@popperjs/core in commonjs format, added Object.assign polyfill.

Install

shell
# with npm
npm i @vant/popperjs

# with yarn
yarn add @vant/popperjs

# with pnpm
pnpm add @vant/popperjs

# with Bun
bun add @vant/popperjs

Usage

see: https://popper.js.org/

Refer

issue: https://github.com/vant-ui/vant/issues/7626


File: packages/vant-icons/README.md

Vant Icons

Install

shell
# with npm
npm i @vant/icons

# with yarn
yarn add @vant/icons

# with pnpm
pnpm add @vant/icons

# with Bun
bun add @vant/icons

Document


File: packages/vant-compat/README.md

@vant/compat

This package provides Vant 3 compatible behavior for Vant 4 users.

Install

shell
# with npm
npm i @vant/compat

# with yarn
yarn add @vant/compat

# with pnpm
pnpm add @vant/compat

# with Bun
bun add @vant/compat

Usage

js
// 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.

json
// 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.

bash
npx vant-cli dev

dev

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.

json
// 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 ไธญ่ฟ›่กŒไฝฟ็”จใ€‚

json
// package.json
{
  "scripts": {
    "dev": "vant-cli dev",
    "test": "vant-cli test",
    "release": "vant-cli release",
    "build-site": "vant-cli build-site"
  }
}

ไนŸๅฏไปฅ้€š่ฟ‡ npm ่‡ชๅธฆ็š„ npx ็›ดๆŽฅๆ‰ง่กŒๆŸไธชๅ‘ฝไปค๏ผš

bash
npx vant-cli dev

dev

่ฟ่กŒๆœฌๅœฐๅผ€ๅ‘็Žฏๅขƒใ€‚

่ฟ่กŒ dev ๅ‘ฝไปคๆ—ถ๏ผŒVant CLI ไผš้€š่ฟ‡ๅฏๅŠจไธ€ไธชๆœฌๅœฐๆœๅŠกๅ™จ๏ผŒ็”จไบŽๅœจๅผ€ๅ‘่ฟ‡็จ‹ไธญๅฏนๆ–‡ๆกฃๅ’Œ็คบไพ‹่ฟ›่กŒ้ข„่งˆใ€‚

build

ๆž„ๅปบ็ป„ไปถๅบ“ใ€‚

่ฟ่กŒ build ๅ‘ฝไปคไผšๅœจ es ๅ’Œ lib ็›ฎๅฝ•ไธ‹็”Ÿๆˆๅฏ็”จไบŽ็”Ÿไบง็Žฏๅขƒ็š„็ป„ไปถไปฃ็ ๏ผŒ่ฏฆ่ง ็›ฎๅฝ•็ป“ๆž„ใ€‚

ๅ‘ๅธƒ npm ๆ—ถ๏ผŒ่ฏทๅฐ†ไปฅไธ‹้…็ฝฎๅŠ ๅ…ฅๅˆฐ package.json ไธญ๏ผŒไฝฟ npm ๅŒ…่ƒฝ่ขซๆญฃ็กฎ่ฏ†ๅˆซ:

json
// 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.

js
// 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:

js
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.

js
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.

js
module.exports = {
  build: {
    css: {
      preprocessor: 'sass',
    },
  },
};

build.css.removeSourceFile

  • Type: boolean
  • Default: 'false'

Whether to remove the source style files after build.

js
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/.

js
module.exports = {
  build: {
    site: {
      publicPath: '/demo-ui/',
    },
  },
};

build.srcDir

  • Type: string
  • Default: src
js
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.

js
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:

ts
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๏ผš

ts
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.

  • Type: string
  • Default: ''

Documentation site logo.

site.description

  • Type: string
  • Default: ''

Documentation site description.

  • Type: object[]
  • Default: undefined

Documentation site left nav. Each item of nav means a navigation group.

js
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.

js
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.

js
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:

js
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:

json
{
  "browserslist": ["Chrome >= 51", "iOS >= 10"]
}