VueJS - Single File Components

When you're defining new components in VueJS you can use the method Vue.component like we've used in a previous tutorial about Vue.

    Vue.component('todo-item', {
        props: ['todo'],
        template: '<li>{{ todo.task }}</li>'

    var app = new Vue({
        el: '#app',
        data: {
            todos: [
                { task: 'Learn JavaScript'},
                { task: 'Learn VueJS'},
                { task: 'Build awesome stuff'}

This has created a Vue component of todo-item the problem with this are:

  • Organising your components in the folder structure can be difficult
  • Template don't have any syntax highlights which can make HTML changes difficult
  • CSS needs to be processed outside of scope. Which makes CSS maintenance in the long run difficult
  • Restricts the use of preprocessor build tools such as Babel

Single file components solve all the above problems by providing you with one file to add your HTML, CSS and Vue object JavaScript. To convert this to a single file component we need to use the file extension of .vue, so let's create a todo-component.vue and use Webpack to convert this to JavaScript and CSS. The single file component can have a template tag for the HTML, a style tag for the CSS and a script tag for the Vue Javascript.

    <li>{{ todo.task }}</li>

        font-size: 125%;;

    export default
        props: ['todo'],

As you can see the logic for the todo list component is now all contained inside this todo-component.vue file but the logic is separated into, HTML, CSS and JavaScript all within this file.

Module Builds With JavaScript

Vue components takes advantage of module builds in Javascript, which means we need to use additional tools within our Javascript development.

  • NPM (Node Package Manager) - Third party package manager for Javascript
  • Babels ES2015
  • Webpack - Module build converts to static Javascript and CSS files.

Learn more about webpack watch the video below.


Reliable uptime monitoring and instant alerts for any website downtime.

Get 50% off forever using the code 50OFFUP.