vue-cli3提供了两种方式集成sass/scss
- 创建项目时选择预处理器sass
- 手动安装sass-loader
安装sass
方法一:创建vue项目时选择预处理器sass
使用vue-cli3创建vue项目
Vue CLI v4.5.15
? Please pick a preset:
Default ([Vue 2] babel, eslint)
Default (Vue 3) ([Vue 3] babel, eslint)
> Manually select features
移动上下键选择Manually select features
,表示手动选择创建项目的配置。
按enter键,进入下一步操作,显示如下:
? Check the features needed for your project:
(*) Choose Vue version
(*) Babel
( ) TypeScript
( ) Progressive Web App (PWA) Support
(*) Router
(*) Vuex
>(*) CSS Pre-processors
(*) Linter / Formatter
( ) Unit Testing
( ) E2E Testing
移动上下键在CSS Pre-processors
处点击空格键以选中,表示需要css预处理工具。
之后再进行css预处理工具操作,显示如下:
? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported by default):
Sass/SCSS (with dart-sass)
> Sass/SCSS (with node-sass)
Less
Stylus
选择Sass/SCSS (with node-sass)
作为我们的CSS预处理器。
完成后项目会帮我们自动安装sass-loader 以及 node-sass依赖。
方法二:手动安装
如果在创建项目没有选择CSS 预处理器,我们也可以手动安装sass-loader以及 node-sass来集成scss
npm install -D sass-loader node-sass
使用sass
至此我们只需要在style指定lang为scss即可:
<style lang="scss">
$color = red;
</style>
vue service clie会自动使用我们安装的sass-loader作为scss内容的加载器。
全局引用配置(重点)
一、Vue 单文件引用
假如现在我们已经将变量都定义在 variables.scss
文件上了,如果要在某个 .vue
文件里使用变量就要先将其引入。如:
<template>
...
</template>
<script>
...
</script>
<style lang="scss">
@import "你的路径/variables.scss";
.button {
background: $--primary-bg;
}
</style>
但是这种方法不长久,如果我们每个组件都要引入,那不是每个 .vue 都要 @import 一次?这也太麻烦了。
所以应该考虑下面的sass全局引用讲解。
二、sass全局引用
1、写在 App.vue 上(不推荐使用)
如果你写的是一个网站,那么肯定会用到 App.vue 这个文件。所以你可以在 App 这个组件里 @import
注意:不要在 App 组件里写 scoped ,这样引入的样式都会应用到每个组件上
<template>
...
</template>
<script>
...
</script>
<style lang="scss">
@import "你的路径/variables.scss";
...
</style>
2、style-resources-loader自动引入(推荐使用)
如果你想自动化导入文件 (用于颜色、变量、mixin……),你可以使用 style-resources-loader
用命令行工具执行下面的代码
vue add style-resources-loader
然后它会让你选择你使用的预处理器
安装完成后选择你使用的预处理器,你可以在 vue.config.js (如果你没有这个文件,就在你的项目根目录里新建一个就行了)复制如下代码:
// vue.config.js
const path = require('path')
module.exports = {
pluginOptions: {
'style-resources-loader': {
preProcessor: 'scss',
patterns: [
// 这里假设你有 `src/variables.scss src/scss/mixin.scss` 这两个文件
path.resolve(__dirname,"./src/scss/variables.scss"),
path.resolve(__dirname,"./src/scss/mixin.scss")
]
}
}
}
备注:
现在的 vue 已经将 /build/webpack.xxx.js 的 webpack 配置文件都隐藏起来了,而这个 vue.config.js 就像是 webpack.xxx.js 的总和,你可以配置 vue 提供的选项也可以混入 webpack 的配置。