Vue에서는 vue-loader 덕분에 Single File Component 구성의 .vue 파일 내에서 style 태그에 lang="scss" 요소를 추가하여 사용할 수 있다.
npm install --save-dev node-sass sass-loader<style lang="scss">
$bgColor: #232323;
.className: {
background: $bgColor;
}
</style>SCSS는 사용함에 있어 variables 또는 mixin, 함수를 사전에 별도의 파일로 분리하여 사용하기에 모든 파일에서 @import 해야하는 반복적인 작업해야하는 불편함이 있을 수 있다.
// *.vue
<style lang="scss">
@import "@/style/_variables.scss";
@import "@/styles/_mixins.scss";
@import "@/styles/_functions.scss";
/* ... */
</styla>이런 반복적인 작업을 피하기 위해서는 위의 파일들을 전역 범위에서 사용할 수 있도록 바꿔줘야 한다.
작업에 앞서 vue-cli의 2.x에서는 webpack.config.js 파일이 루트 디렉토리에 있었으나, 3.x에서는 vue.config.js 파일을 생성하여 설정해야 한다.
// vue.config.js
module.exports = {
// options
}loaderOptions 라는 vue-loader 의 내부 구성을 변경하는데 사용할 수 있는 css 옵션이 있다.
// vue.config.js
module.exports = {
css: {
loaderOptions: {
sass: {
data: `
@import "@/styles/_variables.scss";
@import "@/styles/_mixins.scss";
`
}
}
}
}위 설정을 통해서 sass-loader에 추가된 모든 코드는 전역 범위에서 사용할 수 있다.
// styles/_variables.scss
$bgColor: red;// *.vue
<script lang="scss">
.className {
background: $bgColor;
}
<script>vue-cli 2.x 버전이라면 Webpack 구성 파일의 vue-loader 옵션을 수정해야한다.
// webpack.config.js
{
test: \/.scss&/,
use: [
"vue-styles-loader",
"css-loader",
{
loader: "scss-loader",
options: {
data: `
@import "@/styles/_variables.scss";
@import "@/styles/_mixins.scss";
`
}
}
]
}