Sass(英文全称:Syntactically Awesome Stylesheets)是一个最初由Hampton Catlin设计并由Natalie Weizenbaum开发的层叠样式表语言。Sass是一个将脚本解析成CSS的脚本语言,即SassScript。Sass包括两套语法。最开始的语法叫做“缩进语法”,与Haml类似,使用缩进来区分代码块,并且用回车将不同规则分隔开。而较新的语法叫做“SCSS”,使用和CSS一样的块语法,即使用大括号将不同的规则分开,使用分号将具体的样式分开。通常情况下,这两套语法通过.sass和.scss两个文件扩展名区分开。相信每个前端开发者都对这种css预处理器有所耳闻。
        不管你是刚使用Reactjs或者是Reactjs的老司机,你们一定都听说过create-react-app这个脚手架,而从create-react-app的官方文档中,我们可以看到他们暂时还不支持直接导入LESS或者Sass。但是通过一些配置,我们还是可以从官方脚手架中使用sass/scss/less的。
首先我们先安装node-sass这个组件,我推荐我们国内的coder使用下面的命令行安装
 
npm install -g mirror-config-china --registry=http://registry.npm.taobao.org
npm install node-sass
 
然后在自己项目的package.json中,将以下行添加到scripts中:
 
"build-css": "node-sass-chokidar src/ -o src/","watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive",
 
小提示: 在使用不同的预处理器时,请根据预处理的文档替换build-css和watch-css命令。
现在,您可以将src/App.css重命名为src/App.scss并运行npm run watch-css。watch-css将在src子目录中找到每个Sass文件,并在其旁边创建一个相应的CSS文件,在我们的例子中覆盖src/App.css。由于src/app.js仍然 improt src/App.css,所以样式同样成为您的应用程序的一部分。您现在可以编辑src/App.scss,同时会生成相应的src/App.css。
为了能一边编译sass,一边运行我们的前端项目,我们还需要npm-run-all这个工具,这是一个并行运行多个npm脚本的脚手架工具,安装方式也非常简单。
 
$ npm install npm-run-all --save-dev
# or
$ yarn add npm-run-all --dev
 
最后,在不使用ejec命令的情况下,更改create-react-app的webpack配置,我们使用react-app-rewired来处理,安装方式如下:
 
$ npm install react-app-rewired --save-dev
 
在完成这些步骤之后,我们修改package.json的script内容,让sass一边编译,一边跑着我们的前端项目,实现热更。
 
"scripts": {
"build-css": "node-sass src/ -o src/",
"watch-css": "npm run build-css && node-sass src/ -o src/ --watch --recursive",
"start-js": "node scripts/start.js",
"start": "npm-run-all -p watch-css start-js",
"build": "npm run build-css && node scripts/build.js",
"test": "node scripts/test.js --env=jsdom"
},
 
scripts的命令如上所述,安装完之后,npm start就可以搞定sass的使用问题了。
现在运行run npm和npm run build同样构建了Sass文件。
作者:Originalee
来源:简书
如果需要定于全局的scss样式,只需要完成以上设置后,将index.css文件改成index.scss就行
然后在index.js文件中引入  import './index.scss';
 
以上就是在最新creact-react-app搭建的react项目中使用sass的配置方式;  实际开发中还需要定义公共的sass变量,函数等,要实现这一目的,就还需要进行以下操作(前方高能):
============================-

react sass scss设置全局变量全局函数

定义全局变量的种方式: 
方式一(需要eject暴露环境,不推荐):      https://www.jianshu.com/p/ec57dd11c4eb
  • 1.安装 sass-resources-loader
  npm i sass-resources-loader --save-dev
  • 2.暴露配置文件 npm run eject //如果这一步报错,可能是安装了git后出现的问题,解决方案是:
      • git add .
      • git commit -am "Save before ejecting"
      • npm run eject
      • 这样就能eject了
  • 3.修改 config 里面的 webpack.config.js
在 getStyleLoaders后面添加如下代码
 
.concat({
loader: 'sass-resources-loader',
options: {
resources: [
// 这里按照你的公共变量文件路径填写
path.resolve(__dirname, './../src/common.scss')
]
}
})
 
最终代码如下
 
{
test: sassRegex,
exclude: sassModuleRegex,
use: getStyleLoaders(
{
importLoaders: 2,
sourceMap: isEnvProduction && shouldUseSourceMap,
},
'sass-loader',
).concat({
loader: 'sass-resources-loader',
options: {
resources: [
// 这里按照你的公共变量文件路径填写
path.resolve(__dirname, './../src/common.scss')
]
}
}),
sideEffects: true,},
提示:    './../src/common.scss' 这个是我的公共的sass路径 根据你自己的来配置
以上步骤完成后,重新npm start就可以使用公共变量了.
 
方式二(不需要eject暴露环境,强烈推荐使用这种方式!!!): 
         1  安装3个模块: cnpm install    react-app-rewired    customize-cra    sass-resources-loader  --save-dev
         2 在package.json的同级目录中新建一个config-overrides.js文件,在该文件中写入以下代码:
 
const { override, adjustStyleLoaders } = require("customize-cra");
module.exports = override(
  // ...其他配置...
  adjustStyleLoaders(rule => {
    if (rule.test.toString().includes("scss")) {
      rule.use.push({
        loader: require.resolve("sass-resources-loader"),
        options: {
          resources: "./src/assets/scss/color/outcolor.scss" //这里是你自己放公共scss变量的路径
        }
      });
    }
  })
  // ...其他配置...
);
                
        3 在package.json文件中,将 "scripts"修改为:
                
                      "scripts": {
    "build-css": "node-sass-chokidar src/ -o src/",
    "watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive",
    "start-js": "node scripts/start.js",
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test",
    "eject": "react-app-rewired eject"
  },
                
                4  最后重新运行一下:  npm start;   大功告成!!
 
看完觉得有用的同学,帮忙点个赞让更多人看到吧~~(比心)
     
2019年12月
 
 
 
 
 
 
 

2019最新create-react-app创建的react中使用sass/scss,以及在react中使用sass/scss公共变量的方法的更多相关文章

  1. 深入 Create React App 核心概念

    本文差点难产而死.因为总结的过程中,多次怀疑本文是对官方文档的直接翻译和简单诺列:同时官方文档很全面,全范围的介绍无疑加深了写作的心智负担.但在最终的梳理中,发现走出了一条与众不同的路,于是坚持分享出 ...

  2. 【03】react 之 创建component

    React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归:具体的三种方式: 函数式定义的无状态组件 es5原生方式React.createClass定义的组件 es6形式的ext ...

  3. 如何用 React Native 创建一个iOS APP?(二)

    我们书接上文<如何用 React Native 创建一个iOS APP?>,继续来讲如何用 React Native 创建一个iOS APP.接下来,我们会涉及到很多控件. 1 AppRe ...

  4. 在 .NET Core 5 中集成 Create React app

    翻译自 Camilo Reyes 2021年2月22日的文章 <Integrate Create React app with .NET Core 5> [1] Camilo Reyes ...

  5. 如何用 React Native 创建一个iOS APP?(三)

    前两部分,<如何用 React Native 创建一个iOS APP?>,<如何用 React Native 创建一个iOS APP (二)?>中,我们分别讲了用 React ...

  6. 如何用 React Native 创建一个iOS APP?

    诚然,React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生应用.在 JavaScript 中用 Reac ...

  7. react系列笔记1 用npx npm命令创建react app

    react系列笔记1 用npx npm命令创建react app create-react-app my-app是开始构建新的 React 单页应用程序的最佳方式.它已经为你设置好了开发环境,以便您可 ...

  8. tap news:week5 0.0 create react app

    参考https://blog.csdn.net/qtfying/article/details/78665664 先创建文件夹 安装create react app 这个脚手架(facebook官方提 ...

  9. Create React App

    Facebook开源了React前端框架(MIT Licence),也同时提供了React脚手架 - create-react-app. create-react-app遵循约定优于配置(Coc)的原 ...

随机推荐

  1. MySQL主从复制之半同步模式

    MySQL主从复制之半同步模式 MySQL半同步介绍: 一般情况下MySQL默认复制模式为异步,何为异步?简单的说就是主服务器上的I/O threads 将binlog写入二进制日志中就返回给客户端一 ...

  2. codeforces 657C - Bear and Contribution [想法题]

    题目链接: http://codeforces.com/problemset/problem/657/C ----------------------------------------------- ...

  3. 【HANA系列】SAP HANA计算视图(calculation views)使用RANK报错

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA计算视图(cal ...

  4. 从新向你学习javase(第一天)

    1:阐述JDK和JRE之间区别 jdk(工具)>jre(运行环境)>jvm(虚拟机) 2: 能够使用常见的DOS命令 d:(进入D盘下),cd +路径(进入到当前路径),cd..(返回上一 ...

  5. 兼容IE浏览器保存Cookie

    兼容IE:Response.Cookies[":member"].Expires=DateTime.Now.AddDays(1); 其它浏览器:Response.Cookies[& ...

  6. 手把手教你用Pytorch-Transformers——部分源码解读及相关说明(一)

    一.简介 Transformers是一个用于自然语言处理(NLP)的Python第三方库,实现Bert.GPT-2和XLNET等比较新的模型,支持TensorFlow和PyTorch.本文介对这个库进 ...

  7. <每日一题> Day7:CodeForces-1166C.A Tale of Two Lands (二分 + 排序)

    原题链接 参考代码: #include <cstdio> #define mid ((l + r) / 2) #include <algorithm> using namesp ...

  8. WOJ#3882 旅行问题(POI2004)

    描述 John打算驾驶一辆汽车周游一个环形公路.公路上总共有n车站,每站都有若干升汽油(有的站可能油量为零),每升油可以让汽车行驶一千米.John必须从某个车站出发,一直按顺时针(或逆时针)方向走遍所 ...

  9. [BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树)

    [BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树) 题面 原题面有点歧义,不过从样例可以看出来真正的意思 有n个位置,每个位置可以看做一个集合. ...

  10. Codeforces 1159F Winding polygonal line(叉积)

    其实这个几何写起来还是比较方便,只用到了叉积.首先我们贪心的考虑一种情况,对于任意给定的LR串,我们起点的选择肯定是在这些点围成的凸包端点上,对于这样的起点来说,他对于L或者R都是有选择的机会,而且一 ...