详解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 名称冲突的解决方法
Apr 08 Javascript
extjs 初始化checkboxgroup值的代码
Sep 21 Javascript
JavaScript中的splice()方法使用详解
Jun 09 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
Aug 04 Javascript
Vue中组件之间数据的传递的示例代码
Sep 08 Javascript
详解Node全局变量global模块
Sep 28 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
Nov 13 jQuery
js 数组详细操作方法及解析合集
Jun 01 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
Oct 24 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
Feb 18 Javascript
vue 表单之通过v-model绑定单选按钮radio
May 13 Javascript
vue实现滚动鼠标滚轮切换页面
Dec 13 Vue.js
详解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正则表达式之定界符和原子介绍
2012/10/05 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
jQuery Ajax文件上传(php)
2009/06/16 Javascript
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
js中function()使用方法
2013/12/24 Javascript
fastclick插件导致日期(input[type="date"])控件无法被触发该如何解决
2015/11/09 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
Python中的startswith和endswith函数使用实例
2014/08/25 Python
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
惠普香港官方商店:HP香港
2019/04/30 全球购物
Linux内核产生并发的原因
2016/11/08 面试题
实习老师离校感言
2014/02/03 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
护士见习期自我鉴定
2014/02/08 职场文书
双语教学实施方案
2014/03/23 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
2015年司法所工作总结
2015/04/27 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
红白喜事主持词
2015/07/06 职场文书
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python