# Single File Components
In many Vue projects, global components will be defined using
app.component(), followed by
app.mount('#app') to target a container element in the body of every page.
- Global definitions force unique names for every component
- String templates lack syntax highlighting and require ugly slashes for multiline HTML
All of these are solved by single-file components with a
.vue extension, made possible with build tools such as Webpack or Browserify.
Here's an example of a file we'll call
Now we get:
As promised, we can also use preprocessors such as Pug, Babel (with ES2015 modules), and Stylus for cleaner and more feature-rich components.
These specific languages are only examples. You could as easily use TypeScript, SCSS, PostCSS, or whatever other preprocessors that help you be productive. If using Webpack with
vue-loader, it also has first-class support for CSS Modules.
# What About Separation of Concerns?
One important thing to note is that separation of concerns is not equal to separation of file types. In modern UI development, we have found that instead of dividing the codebase into three huge layers that interweave with one another, it makes much more sense to divide them into loosely-coupled components and compose them. Inside a component, its template, logic and styles are inherently coupled, and collocating them actually makes the component more cohesive and maintainable.
<!-- my-component.vue --> <template> <div>This will be pre-compiled</div> </template> <script src="./my-component.js"></script> <style src="./my-component.css"></style>
# Getting Started
# Example Sandbox
If you want to dive right in and start playing with single-file components, check out this simple todo app on CodeSandbox.
Node Package Manager (npm): Read the Getting Started guide section about how to get packages from the registry.
After you've taken a day to dive into these resources, we recommend checking out Vue CLI. Follow the instructions and you should have a Vue project with
.vue components, ES2015, webpack and hot-reloading in no time!
# For Advanced Users
The CLI takes care of most of the tooling configurations for you, but also allows fine-grained customization through its own config options.
In case you prefer setting up your own build setup from scratch, you will need to manually configure webpack with vue-loader. To learn more about webpack itself, check out their official docs and webpack learning academy.