An Introduction to Vue Template Compiler
The vue-template-compiler module is a powerful tool for compiling Vue templates and single file components into JavaScript. Most developers don't use vue-template-compiler directly. But bundler tools like vue-loader for Webpack use vue-template-compiler to do the heavy lifting of actually compiling .vue
files.
The vue-template-compiler has two primary functions: converting templates to render()
functions and parsing single file componens.
Compile Template to Render Function
A Vue template is just a plain string. Vue-template-compiler's compile()
function converts a template string that you can use as a render()
function for your components.
const compiler = require('vue-template-compiler');
const { renderToString } = require('vue-server-renderer').createRenderer();
// Compile a `render()` function based on a string template
const { render } = compiler.compileToFunctions('<h1>Hello, {{message}}</h1>');
Vue.component('hello', {
props: ['message'],
render
});
const app = new Vue({
template: '<hello message="World"></hello>'
});
// <h1 data-server-rendered="true">Hello, World</h1>
const data = await renderToString(app);
Parsing a .vue
File
Vue-template-compiler has a separate function called parseComponent()
that helps you compile single file components (.vue
files) into JavaScript.
const compiler = require('vue-template-compiler');
const parsed = compiler.parseComponent(`
<template>
<h1>{{message}}</h1>
</template>
<script>
module.exports = {
data: () => ({ message: 'Hello World' })
};
</script>
`);
// Contains `template`, `data` properties
const appComponent = Object.assign({ template: parsed.template.content },
eval(parsed.script.content));
Vue.component('app', appComponent);
const app = new Vue({
template: '<app></app>'
});
const data = await renderToString(app);
// <h1 data-server-rendered="true">Hello World</h1>
data;