webpack loader for Vue Single-File Components
refSugar: boolean
: enable experimental ref sugar.
customElement: boolean | RegExp
: enable custom elements mode. An SFC loaded in custom elements mode inlines its <style>
tags as strings under the component's styles
option. When used with defineCustomElement
from Vue core, the styles will be injected into the custom element's shadow root.
Default is /\.ce\.vue$/
true
will process all .vue
files in custom element mode.enableTsInTemplate: boolean
(16.8+): allow TS expressions in templates when <script>
has lang="ts"
. Defaults to true
.
When used with ts-loader
, due to ts-loader
's cache invalidation behavior, it sometimes prevents the template from being hot-reloaded in isolation, causing the component to reload despite only the template being edited. If this is annoying, you can set this option to false
(and avoid using TS expressions in templates).
Alternatively, leave this option on (by default) and use esbuild-loader
to transpile TS instead, which doesn't suffer from this problem (it's also a lot faster). However, do note you will need to rely on TS type checking from other sources (e.g. IDE or vue-tsc
).
vue-loader
is a loader for webpack that allows you to author Vue components in a format called Single-File Components (SFCs):
<template>
<div class="example">{{ msg }}</div>
</template>
<script>
export default {
data() {
return {
msg: 'Hello world!',
}
},
}
</script>
<style>
.example {
color: red;
}
</style>
There are many cool features provided by vue-loader
:
<style>
and Pug for <template>
;.vue
file that can have custom loader chains applied to them;<style>
and <template>
as module dependencies and handle them with webpack loaders;In a nutshell, the combination of webpack and vue-loader
gives you a modern, flexible and extremely powerful front-end workflow for authoring Vue.js applications.
The following section is for maintainers and contributors who are interested in the internal implementation details of
vue-loader
, and is not required knowledge for end users.
vue-loader
is not a simple source transform loader. It handles each language blocks inside an SFC with its own dedicated loader chain (you can think of each block as a "virtual module"), and finally assembles the blocks together into the final module. Here's a brief overview of how the whole thing works:
vue-loader
parses the SFC source code into an SFC Descriptor using @vue/compiler-sfc
. It then generates an import for each language block so the actual returned module code looks like this:```js
// code returned from the main loader for 'source.vue'
// import the block
import render from 'source.vue?vue&type=template'
// import the