当前咱们使用scss变量有两个痛点:css
为了解决这两个问题,咱们以建立js文件以json格式定义scss变量,而后经过配置webpack的解析规则来达到即能像普通scss同样使用,又能做为js变量使用的目的。vue
全部scss变量在style/variables.scss.js
编写,格式要求为:webpack
const variables = { 'header_height': '60px', 'header_background': `#ededed` } module.exports = variables;
注意:命名如下划线链接是为了在js文件中可以单个import, 使用中已经在webpack进行转换,必须按照此格式!
在scss变量中使用是正常的scss变量:$header-height
在js中使用是定义时的变量格式:import { header_height } from "@/style/variables.scss.js";
git
配置webpack中sass解析方式,通常来讲项目构建者已经处理完毕,项目成员无需关心。
使用时无需引入,直接在样式文件中正常使用便可。github
scss中使用示例
.the-nav{ height: $header-height; }
js中使用示例
import { header_height } from "@/style/variables.scss.js"; ... data(){ return { header_height: header_height } } ...
配置讲解web
vue.config.js 中 cuecli3+
let scssVariables = require('./src/style/variables.scss.js'); module.exports = { css: { loaderOptions: { sass: { prependData: Object.keys(scssVariables) .map(k => `\$${k.replace('_', '-')}: ${scssVariables[k]};`) .join('\n') } } } };
注意:此处有个坑,新版本的sass-loader更换了api参数prependData
可是彷佛没有文档说明json
老版本的sass-loader vue.config.js 中 cuecli3+
let scssVariables = require('./src/style/variables.scss.js'); module.exports = { css: { loaderOptions: { sass: { data: Object.keys(scssVariables) .map(k => `\$${k.replace('_', '-')}: ${scssVariables[k]};`) .join('\n') } } } };
老版本data
=> 新版本 prependData
api
webpack.config.js中 vuecli2
let scssVariables = require('./src/style/variables.scss.js'); ... { test: /\.scss$/, use: [ 'css-loader', 'postcss-loader', { loader: 'sass-loader', options: { data: Object.keys(scssVariables) .map(k => `\$${k.replace('_', '-')}: ${scssVariables[k]};`) .join('\n') } } ] } ...
通过一番姿式,到这里已经能够成功解锁新世界啦~~~~sass
GitHub 欢迎交友post