Understanding Vue-cli & Single Vue Components

In this article, we'll learn how to create single Vue components while using Vue-cli & webpack. We'll cover the following in this article:

Reading Time: 2 minutes

In this article, we’ll learn how to create single Vue components while using Vue-cli & webpack. We’ll cover the following in this article:

Topics to be covered

-Vue cli

-Utilizing bulma.io

-Installing webpack loaders

-Introduction to Single file vue components

-Props & slots inside vue templates

-Simple Event binding


Open up your terminal & run the following command to install vue-cli in your machine. Make sure you’ve npm installed on your machine.


$ npm install –g vue-cli

Make a new directory in your /code directory


$ mkdir learning-vue-cli

OR Use Vue Init

Or simply initialize vue by typing the following command in your terminal


$ vue init <template_name> <directory_name>

For the <Template_name>,  you can find the list of templates at https://github.com/vuejs-templates


In our case, let’s use webpack-simple template


$ vue init webpack-simple learning-vue-cli

After initializing & configuring, run npm install to get all the dependencies

$ npm install

Start the server for the development environment

$ npm run dev

Utilizing Bulma.io

Install bulma in your project by typing the following command in your terminal

$ npm install bulma –save

Installing Webpack Loaders

There are a variety of webpack loaders to use in your project.

Let’s just pull in the most basic sass-loader

$ npm install sass-loader –save-dev

Introduction to Single file components

Global components works very well in small to medium-sized projects. But when it comes to scale-ability and re-usability, single file components comes into play with a .vue extension.


Every vue single file component consists of the following three sub-elements inside to enhance productivity of your application




Create new vue components – DIY

Make a new file namely foobar.vue, and get any of the component template from bulma.io. Leave us a comment on the result & let us know if you get stuck at any point.


Props & slots inside vue templates

With VueJS in place, we have multiple options to make our content dynamic.

– Passing data with props

A prop is a custom attribute for passing information from parent components.

Props can be used inside template as:




Now In our script

//exporting it down to our main build

Export default {

Props : [‘title’]


– Content distribution with slots

When using components, it is often desired to compose them like this:







Things to note here are:

The <app> component will likely to have its own template and same goes for its child components.

Simple Event Binding


We need to make the delete button work as it supposed to do.

With vanilla JavaSript or Jquery, you’ll have to write couple of lines to make it work but with Vue JS, its simple enough.

In our script



Showing: true



Whereas in the markup,

<button @click=”showing=false”>



Now in our main.js

Import ‘bulma’

Import Foobar from ‘./foobar.vue’

Vue.component(‘foobar, Foobar)


Now inside of your project’s markup. You can use



Questions, Improvements & Feedback

If you’ve any questions, leave us a comment below. We’re open for your suggestions and feedback as well. You can ask us on Twitter aswell.