zoukankan      html  css  js  c++  java
  • react移动端项目使用px2rem适配和antd-mobile按需加载的webpack小结

      创建项目:

    npx create-react-app 项目名称
    

     使用customize-cra修改react的webpack配置,安装依赖(这里指定一下版本)

    npm install react-app-rewired@2.0.2 customize-cra --save-dev 

      修改 package.json 文件

    //原来的:
     "scripts": {
        "start": "react-scripts start",
        "build": "react-scripts build",
        "test": "react-scripts test",
        "eject": "react-scripts eject"
      },
    //修改后:
     "scripts": {
        "start": "react-app-rewired start",
        "build": "react-app-rewired build",
        "test": "react-app-rewired test",
        "eject": "react-scripts eject"
      },
    

    一 、px2rem适配的配置

    1. 安装依赖 

    npm install postcss-px2rem lib-flexible --save
    npm install react-app-rewire-postcss --save-dev
    

     2. 修改config-overrides.js(如果没有就新建,在项目根目录)

    const {override}  = require("customize-cra")
    const path = require("path")
    const rewirePostcss = require('react-app-rewire-postcss');
    const px2rem = require('postcss-px2rem')
     
    module.exports = override(
        
        (config,env)=>{
           
            // 重写postcss
            rewirePostcss(config,{
                plugins: () => [
                    require('postcss-flexbugs-fixes'),
                    require('postcss-preset-env')({
                        autoprefixer: {
                            flexbox: 'no-2009',
                        },
                        stage: 3,
                    }),
                   //关键:设置px2rem 
                    px2rem({
                        remUnit: 37.5,
                        exclude:/node-modules/
                    })
                ],
            });
    
    
            return config
        }
    );
    

      

    3. 在index.js 直接引入 lib-flexible

    import 'lib-flexible'
    

     这样适配就完成了,直接在项目中写px ,会自动转rem,在内嵌样式style 上是无效的,所以在样式一般是鞋子要样式文件中才能自动转 

    二: antd-mobile按需加载

     1. 安装依赖

    npm install babel-plugin-import --save-dev
    npm install antd-mobile --save
    

    2. 修改 config-overrides.js 

    const {override,fixBabelImports }  = require("customize-cra")
     module.exports = override(
       //按需加载
        fixBabelImports('import', {
            libraryName: 'antd-mobile',
            style: 'css',
        }),
        (config,env)=>{
    
            return config
        }
    );  

    这样按需加载配置ant-mobile 就完成了

    三:使用scss 并且配置全局样式文件

    1.安装依赖

    npm install sass-resources-loader --save-dev
    

    2. 修改 config-overrides.js

    const {override}  = require("customize-cra")
    const path = require("path")
    
     module.exports = override(
        (config,env)=>{
           // 修改 sass 配置 ,规则 loader 在第五项(具体看配置)
           // 全局引入公共样式,使用时候不需再导入
            const loaders = config.module.rules.find(rule => Array.isArray(rule.oneOf)).oneOf;
            loaders[5].use.push({
            loader: 'sass-resources-loader',
            options: {
                    resources: path.resolve(__dirname, 'src/asset/css/common.scss')//全局引入公共的scss 文件
                }
             })
    
            return config
        }
    );
    

    4. 其他一些webpack常规配置  

    const {override,addWebpackAlias,addWebpackExternals}  = require("customize-cra")
    const path = require("path")
    const uglifyjsPlugin = require("uglifyjs-webpack-plugin")
    const byPlugin = [
         //目的打包后压缩和去掉控制台输出和警告,打包过程出现:xxx.js ontains invalid source map(可忽略)
        new uglifyjsPlugin(
            {
                uglifyOptions:{
                    warnings:false,
                   compress:{
                       drop_debugger:true,
                       drop_console:true
                   }
                }
            }
        )
    ];
     module.exports = override(
       
        //不做打包处理配置,如直接以cdn引入的
        addWebpackExternals({ 
            echarts: "window.echarts",
          }),
    
        //路径别名
        addWebpackAlias({ 
            '@': path.resolve(__dirname, 'src'),
        }),
    
        (config,env)=>{
            if(process.env.NODE_ENV!=="development"){
                   config.devtool = false; ////去掉打包后的map文件
                   config.plugins = [...config.plugins,...byPlugin] // 打包是使用的插件
            }
            return config
        }
    );
    
                 
    

      

      

  • 相关阅读:
    HBase 异步查询导致的死锁和zookeeper通信中断问题追踪与总结[非技术]
    [读书笔记]代码整洁之道读书笔记
    HBase行锁与MVCC分析
    进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿
    上周回顾 - 2012年11.26-12.4
    2012年一个屌丝程序员的学习总结:读书、户外、泡妞、习惯、母猪产后护理
    C#_WinForm接收命令行参数
    SQL常识
    集成.Net / Flex3 & FluorineFX — Part II: The Client
    DB2基本概念
  • 原文地址:https://www.cnblogs.com/beyonds/p/12988329.html
Copyright © 2011-2022 走看看