详解react内联样式使用webpack将px转rem


Posted in Javascript onSeptember 13, 2018

背景

在开发react项目时,很多时候我们把style写在css、less、scss里,经过像postcss这样的配置处理,但有没有这样一种需求呢,像有些样式我们直接写在xml标签上style里,然后也能进行处理,如px2rem能将px转rem,是否在style上写也能实现。

思路

我们在webpack,/.(js|jsx)?$/这样babel-loader之前(webpack从右往左)加一个loader把需要转变的px进行替换,不就好了,先找找有没有这样的loader,我找了下没找到,只能自己写一个了

代码

const loaderUtils = require('loader-utils');

// 默认参数
const defaultopts = {
  remUnit: 100, // rem unit value (default: 100)
  remFixed: 2, // rem value precision (default: 2)
};
// 获取webpack配置好的参数
const opts = loaderUtils.getOptions(this);
// 将参数组合
const config = Object.assign({}, defaultopts, opts);
const ZPXRegExp = /\b(\d+(\.\d+)?)SUPX\b/;

module.exports = function (source) {
  let pxGlobalRegExp = new RegExp(ZPXRegExp.source, 'g');
  if (this.cacheable) {
    this.cacheable();
  }
  // 先test下有没有符合的如果有再进行替换
  if (pxGlobalRegExp.test(source)) {
    return source.replace(pxGlobalRegExp, ($0, $1) => {
      let val = $1 / config.remUnit;
      // 精确到几位
      val = parseFloat(val.toFixed(config.remFixed));
      return val === 0 ? val : val + 'rem';
    });
  } else {
    return source;
  }
};

用法

{
  loader: path.join(rootPath, 'loaders/jsxPx2RemLoader'),
  options: {
    remUnit: 100,
    remFixed: 3
  }
}

源代码

源码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery事件e参数的方法preventDefault()取消默认行为
Sep 26 Javascript
Javascript selection的兼容性写法介绍
Dec 20 Javascript
Javascript中的五种数据类型详解
Dec 26 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
Mar 03 Javascript
Angular.js中处理页面闪烁的方法详解
Mar 09 Javascript
vue2.0 computed 计算list循环后累加值的实例
Mar 07 Javascript
200行代码实现blockchain 区块链实例详解
Mar 14 Javascript
Vuex 单状态库与多模块状态库详解
Dec 11 Javascript
vue获取验证码倒计时组件
Aug 26 Javascript
Angular6项目打包优化的实现方法
Dec 15 Javascript
JavaScript中的this基本问题实例小结
Mar 09 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
Sep 10 Javascript
详解webpack 热更新优化
Sep 13 #Javascript
Vue中使用 setTimeout() setInterval()函数的问题
Sep 13 #Javascript
Angularjs之ngModel中的值验证绑定方法
Sep 13 #Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
Sep 13 #Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
Sep 13 #Javascript
mpvue中使用flyjs全局拦截的实现代码
Sep 13 #Javascript
AngularJS修改model值时,显示内容不变的实例
Sep 13 #Javascript
You might like
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
Vue+mui实现图片的本地缓存示例代码
2018/05/24 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
微信小程序实现点击生成随机验证码
2020/09/09 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
call在Python中改进数列的实例讲解
2020/12/09 Python
Python爬取网站图片并保存的实现示例
2021/02/26 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
支教自我鉴定
2014/01/18 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
担保贷款承诺书
2015/04/30 职场文书
务工证明怎么写
2015/06/18 职场文书
Django如何与Ajax交互
2021/04/29 Python
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python