Nicer imports with webpack aliases
The Setup
- Initialized with Vue CLI + Webpack template.
- Sass loader installed so we can use SCSS in our components.
The Problem
As a project grows, we'll create many many components at different levels. Say we have a global set of SCSS variables that we might need to reference in our .vue single file components.
Lets say, those variables are located at src/_variables.scss and the file looks like this.
//_variables.scss
// COLORS
--------------------------
$brand-primary : #bada55;
$brand-secondary: #666666;
The Basic Solution
Since we are great at relative paths, we would go to say src/components/Hello.vue and import the variables like so.
@import "../scss/variables";
or if we want the variables in src/components/admin/Dashboard.vue we would import it like...
@import "../../scss/variables";
and then we can refer to $brand-primary in our components. That works!
The Better Solution
The problem with the above approach is evident.
- It's clumsy.
- Real world applications have much deeper levels.
- Bad for maintenance.
We can easily fix this by using Webpack Aliases. What we are essentially doing there is that we are creating a special word for webpack to recognize and resolve that to a path of our choice.
So we go to webpack.base.conf.js and look for alias. We add an entry for our src/scss directory as follows.
alias: {
...,
'$scss': resolve('src/scss')
}
Now, we can go back to src/components/Home.vue and change the import statement to
@import "~$scss/variables";
and guess what? The same path works for src/components/admin/Dashboard.vue. No long relative paths anymore.
Hope this helps and thanks for reading!