# babel-plugin-veui :::tip Currently VEUI is published on npm in the form of source code and has to be transpiled before use. (Read more about the trade-off of publishing source code in [this post](https://babeljs.io/blog/2018/06/26/on-consuming-and-publishing-es2015+-packages) published by [Henry Zhu](https://www.patreon.com/henryzhu) on Babel's blog.) Babel plugins for Lodash and Vue JSX are required to transpile VEUI and VEUI provides its own Babel plugin to offer minimized code size while simply `import`ing components. ::: ## Cherrypicking components This Babel plugin allows you to write simple `import` statements without importing VEUI as a whole. With this plugin, the following statement: ```js import { Button, Input } from 'veui' ``` will be automatically transformed into: ```js import Button from 'veui/components/Button' import Input from 'veui/components/Input' ``` So only the components that are actually imported will appear in the final bundle. It works similarly with Lodash's [babel-plugin-lodash](https://github.com/lodash/babel-plugin-lodash). ## Automatic prefixing To avoid conflict with native HTML elements, it's recommended to prefix components when they are registered as follows: ```js export default { components: { 'veui-button': Button, 'veui-input': Input } // ... } ``` It's kind of verbose so `babel-plugin-veui` helps to support the following usage: ```js import { VeuiButton, VeuiInput } from 'veui' export default { components: { VeuiButton, VeuiInput } // ... } ``` When the imported component is prefixed with `Veui` the plugin will find the corresponding component without the prefix. Now it's possible to use components inside templates as follows: ```html Submit ``` Apart from the prefix `veui-`, `babel-plugin-veui` also supports using `v-` as a prefix: ```js import { VButton, VInput } from 'veui' export default { components: { VButton, VInput } // ... } ``` And use as follows: ```html Submit ```