|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- # @vitejs/plugin-vue [](https://npmjs.com/package/@vitejs/plugin-vue)
-
- > Note: as of `vue` 3.2.13+ and `@vitejs/plugin-vue` 1.9.0+, `@vue/compiler-sfc` is no longer required as a peer dependency.
-
- ```js
- // vite.config.js
- import vue from '@vitejs/plugin-vue'
-
- export default {
- plugins: [vue()],
- }
- ```
-
- For JSX / TSX support, [`@vitejs/plugin-vue-jsx`](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue-jsx) is also needed.
-
- ## Options
-
- ```ts
- export interface Options {
- include?: string | RegExp | (string | RegExp)[]
- exclude?: string | RegExp | (string | RegExp)[]
-
- isProduction?: boolean
-
- // options to pass on to vue/compiler-sfc
- script?: Partial<Pick<SFCScriptCompileOptions, 'babelParserPlugins'>>
- template?: Partial<
- Pick<
- SFCTemplateCompileOptions,
- | 'compiler'
- | 'compilerOptions'
- | 'preprocessOptions'
- | 'preprocessCustomRequire'
- | 'transformAssetUrls'
- >
- >
- style?: Partial<Pick<SFCStyleCompileOptions, 'trim'>>
-
- /**
- * Transform Vue SFCs into custom elements.
- * - `true`: all `*.vue` imports are converted into custom elements
- * - `string | RegExp`: matched files are converted into custom elements
- *
- * @default /\.ce\.vue$/
- */
- customElement?: boolean | string | RegExp | (string | RegExp)[]
-
- /**
- * Enable Vue reactivity transform (experimental).
- * https://vuejs.org/guide/extras/reactivity-transform.html
- * - `true`: transform will be enabled for all vue,js(x),ts(x) files except
- * those inside node_modules
- * - `string | RegExp`: apply to vue + only matched files (will include
- * node_modules, so specify directories if necessary)
- * - `false`: disable in all cases
- *
- * @default false
- */
- reactivityTransform?: boolean | string | RegExp | (string | RegExp)[]
-
- /**
- * Use custom compiler-sfc instance. Can be used to force a specific version.
- */
- compiler?: typeof _compiler
- }
- ```
-
- ## Asset URL handling
-
- When `@vitejs/plugin-vue` compiles the `<template>` blocks in SFCs, it also converts any encountered asset URLs into ESM imports.
-
- For example, the following template snippet:
-
- ```vue
- <img src="../image.png" />
- ```
-
- Is the same as:
-
- ```vue
- <script setup>
- import _imports_0 from '../image.png'
- </script>
-
- <img :src="_imports_0" />
- ```
-
- By default the following tag/attribute combinations are transformed, and can be configured using the `template.transformAssetUrls` option.
-
- ```js
- {
- video: ['src', 'poster'],
- source: ['src'],
- img: ['src'],
- image: ['xlink:href', 'href'],
- use: ['xlink:href', 'href']
- }
- ```
-
- Note that only attribute values that are static strings are transformed. Otherwise, you'd need to import the asset manually, e.g. `import imgUrl from '../image.png'`.
-
- ## Example for passing options to `vue/compiler-sfc`:
-
- ```ts
- import vue from '@vitejs/plugin-vue'
-
- export default {
- plugins: [
- vue({
- template: {
- compilerOptions: {
- // ...
- },
- transformAssetUrls: {
- // ...
- },
- },
- }),
- ],
- }
- ```
-
- ## Example for transforming custom blocks
-
- ```ts
- import vue from '@vitejs/plugin-vue'
- import yaml from 'js-yaml'
-
- const vueI18nPlugin = {
- name: 'vue-i18n',
- transform(code, id) {
- if (!/vue&type=i18n/.test(id)) {
- return
- }
- if (/\.ya?ml$/.test(id)) {
- code = JSON.stringify(yaml.load(code.trim()))
- }
- return `export default Comp => {
- Comp.i18n = ${code}
- }`
- },
- }
-
- export default {
- plugins: [vue(), vueI18nPlugin],
- }
- ```
-
- ## Using Vue SFCs as Custom Elements
-
- > Requires `vue@^3.2.0` & `@vitejs/plugin-vue@^1.4.0`
-
- Vue 3.2 introduces the `defineCustomElement` method, which works with SFCs. By default, `<style>` tags inside SFCs are extracted and merged into CSS files during build. However when shipping a library of custom elements, it may be desirable to inline the styles as JavaScript strings and inject them into the custom elements' shadow root instead.
-
- Starting in 1.4.0, files ending with `*.ce.vue` will be compiled in "custom elements" mode: its `<style>` tags are compiled into inlined CSS strings and attached to the component as its `styles` property:
-
- ```js
- import { defineCustomElement } from 'vue'
- import Example from './Example.ce.vue'
-
- console.log(Example.styles) // ['/* css content */']
-
- // register
- customElements.define('my-example', defineCustomElement(Example))
- ```
-
- Note in custom elements mode there is no need to use `<style scoped>` since the CSS is already scoped inside the shadow DOM.
-
- The `customElement` plugin option can be used to configure the behavior:
-
- - `{ customElement: true }` will import all `*.vue` files in custom element mode.
- - Use a string or regex pattern to change how files should be loaded as Custom Elements (this check is applied after `include` and `exclude` matches).
-
- ## License
-
- MIT
|