关键词:sass全局变量 js引用sass变量

1 如何在样式中使用 scss 的声明的全局变量

假设我们有一个全局的 scss 变量文件/styles/_vars.sass,如下:

$red: red;
$blue: blue;

如果想要在组件的样式中使用这些变量,我们需要引入这个文件,像这样:

<style lang="scss" scoped>

@import '/styles/_var.scss';

.login {
background-color: $red;
}
</style>

这种方式虽然解决了问题,但带来了很多问题:代码冗余、不好维护...

我们迫切需要一种全新的更优雅的方法——sass-resources-loader

该加载器将 sass 资源自动导入每个所需的 sass 模块。 因此,您可以在所有 sass 样式中使用共享变量和mixin,而无需在每个文件中手动导入它们。

注意,此loader不限于sass,并适用于 less,post-css等。

Supports Webpack 4.

官方github上对于不同的配置都给出详细的说明,请参考sass-resources-loader

2 如何在 js 中使用 sass 的全局变量

通过webpackcss module,我们可以轻松的在 js 中使用 sass 文件中定义的全局变量。

第一步,安装需要的依赖:

npm install sass-loader node-sass webpack --save-dev

第二步使用sass-loader配置webpack,这样我们就能在 js 中使用 sass 变量了。

// webpack.config.js

module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader', 'sass-loader']
}
]
}
}

现在,我们在 sass 文件中定义变量并将其导出为 js,CSS Module 有一个:export关键字,它在功能上等同于 ES6 的关键字export,即导出一个 js 对象。

// /styles/global.scss

$exportedValue: #ccc;

:export {
exportedKey: $exportedValue;
/* ... */
}

现在,我们可以在 js 中使用这个变量啦。

// js/test.js

import styles from '/styles/global.scss'
console.log(styles)

参考

css-modules

sass-resources-loader

how-to-share-variables-between-js-and-sass

如何设置 sass 全局变量,js如何使用 sass 变量的更多相关文章

  1. Vue中使用Sass全局变量

    前言 假设我们原有项目的主题色是蓝色的,这时有个需求,需要把主题色改成橙色的.一般情况下,我们可能会在main.js中引入公共样式文件,但你会发现,在组件中使用公共样式文件中定义的某个参数时,会报一个 ...

  2. gulpfile.js(编译sass,压缩图片,自动刷新浏览器)

    var gulp = require('gulp'),     sass = require('gulp-sass'),     watch = require('gulp-watch'),      ...

  3. sass学习(2)——关于变量

    定义一个sass变量 可以说,变量是一个编程语言的基础.所以对于sass来说,变量肯定是浓墨重彩的其中一笔,当然函数也是.那我们如何声明定义一个sass的变量呢? 变量的符号$ 变量名称 变量的值 那 ...

  4. Sass学习之路:Sass、Compass安装与命令行

    导言 CSS不是一门真正意义上的编程语言,很多编程语言理所当然的特性(比如变量),都不被支持.同时再开发模块化的web项目的时候,也要避免相互干扰.为了弥补CSS的这些不足,就产生了CSS预处理器,S ...

  5. 分享一个快速设置背景的js 自动获取背景图的长宽

    我来分享一个快速设置背景的js (需要jq支持!) 快速切图铺页面用---就是不需要手动输入背景图的长宽 自动获取背景图的长宽 : <div class="wrap"> ...

  6. Sass学习之路(3)——Sass编译

    Sass的编译也是在我们使用Sass的时候必须要经过的一个步骤,因为".sass"和".scss"文件并不能直接使用<link>标签引用,最终其实还 ...

  7. Sass学习之路(1)——Sass简介

    Sass是CSS的一种预处理器语言,类似的语言还有Less,Stylus等. 那么什么是CSS预处理器? CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些 ...

  8. FE: Sass and Bootstrap 3 with Sass

    Sass简介 Sass是CSS的预处理语言:提供了变量定义.函数定义.函数调用.类继承.嵌套(CSS层级关系)及代码引入功能. Sass安装指南 MAC OS X 10.10.3   终端 -> ...

  9. 使用javax.script包实现Java设置JS脚本中的变量

    下面例子中,我们通过javax.script包ScriptEngine.put()方法设置JS脚本中的变量,JS把所有在线用户输出. package ajava.code.javase; import ...

随机推荐

  1. SQL Server中使用数据库快照的方式来完成测试环境中数据库的轻量级备份还原操作

    在开发或者测试环境的数据库中,经常会发现有开发或者测试人员误删除表或者数据的情况,对于开发或者测试库,一般都没有安排定时的备份任务去备份数据库,一方面是由于存储资源有限,不太可能给开发或者测试环境准备 ...

  2. SQL 读取csv 文件批量插入数据

    use test /* create table temp_pre ( vc_product_id varchar(20) default '', en_in_amount numeric(9,2)d ...

  3. JAVA算术运算符

    算术运算符 +.-.*(乘号)./(除号,取商).%(取余数.取模) 特殊的运算符:++(加加).--(减减) int  a = 1; a+=10;  等同于a=a+10; a-=5;   等同于a= ...

  4. android之RefBase

    路径 system core libutils include utils RefBase.h namespace android 命名空间是android class TextOutput;// 这 ...

  5. springmvc拦截器的简单了解

    1.定义一个拦截器 2.在springmvc.xml中配置拦截器. (1)拦截器拦截的请求是建立在前端控制器配置之下的,若DispatcherServlet拦截的是*.action,则拦截器即使配置 ...

  6. 十四、ChainOfResponsibility 责任链模式

    设计: 代码清单: Trouble: public class Trouble { private int number; public Trouble(int number){ this.numbe ...

  7. MyBatis :Insert (返回主键、批量插入)

    一.前言    数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二.insert元素 属性详解   其属性如下: parameterType , ...

  8. 错误:libstdc++.so.6: wrong ELF class

    1.安装mysql的时候报错缺少GLIBCXX_3.4.15 2.按照网上的下载了libstdc++.so.6.0.17 放到/usr/lib64 下 删除之前的libstdc++.so.6的链接 重 ...

  9. fortitoken

    1.token状态为error,且不能分配给用户使用 解决: 关联有User的token状态是error的原因是:用户一直并未使用.

  10. python中sys.path--学习

    本着下定义开头吧:python中import某个A模块时,首先会从python的内置模块中查找是否含义该模块的定义若未查询到会从sys.path对应的模块路径查询是否含有对应模块的定义,如果搜索完成依 ...