React 配置rem

react-app-rewired 擴展webpack的方法

 npm install react-app-rewired --save-dev
 // 或者
 yarn add react-app-rewired

/* 修改package.json */

 "scripts": {
-   "start": "react-scripts start",
+   "start": "react-app-rewired start",
-   "build": "react-scripts build",
+   "build": "react-app-rewired build",
-   "test": "react-scripts test --env=jsdom",
+   "test": "react-app-rewired test --env=jsdom",
-   "eject": "react-scripts eject"
}

文檔https://github.com/timarney/react-app-rewired/blob/HEAD/README_zh.md

安裝customize-cra

npm install customize-cra --save-dev

react項目中我們最常用的組件庫antd,我們需要配置按需加載。

使用babel-plugin-import,它是一個用於按需加載組件代碼和樣式的 babel 插件。

npm install babel-plugin-import --save-dev
或者
yarn add babel-plugin-import

支持裝飾器

const { override, addDecoratorsLegacy } = require("customize-cra");
module.exports = override(
    addDecoratorsLegacy()
);

配置webpack

/* config-overrides.js */
 const { override, fixBabelImports, addDecoratorsLegacy} = require('customize-cra'); 
 module.exports = override(
   fixBabelImports('import', {
     libraryName: 'antd',
     libraryDirectory: 'es',
     style: 'css',
   }),
   addDecoratorsLegacy()
 );

在組件中就可以按需引入組件庫中所需要的組件了。

安裝 postcss-pxtorem

npm install postcss-pxtorem --save

config-overrides.js,添加代碼:

/**
 * [description]
 * 使用過create-react-app(以下簡稱cra)的朋友都知道,這是react官方的一款腳手架工具,
 * 使用過內部集成了使用react-app-rewired,使用此插件可以暴露出webpack
 * 但是!react-app-rewired2.x以後,不再支持injectBabelPlugin的方式,需要安裝customize-cra。
 * npm install customize-cra --save-dev 或者  yarn add customize-cra --dev
 * 所以新建config-overrides.js可以讀取到該文件
 */
const { override, fixBabelImports,addPostcssPlugins } = require('customize-cra');
 
/**
 * [關閉打包後的sourcemap description]
 * [打包後我們會發現靜態文件夾中會有很多的css和js的map文件,關閉sourcemap]
 */
// process.env.GENERATE_SOURCEMAP = "false";
 
module.exports = override(
  fixBabelImports('import', {
    libraryName: 'antd-mobile',
    style: 'css',
  }),
  addPostcssPlugins([require('postcss-pxtorem')({
                               rootValue: 16,
                               propList: ['*']
                               // propList: ['*', '!border*', '!font-size*', '!letter-spacing'],
                               // propWhiteList: []
                            }),])
 
    /**
     * [安裝less]
     * npm i less
     * npm i -D less-loader
     */
    // addLessLoader({
    //   javascriptEnabled: true,
    //   modifyVars: { '@primary-color': '#1DA57A' },
    // }),
 
    /**
     * [remUnit description]
     * npm install lib-flexible --save
     * flexible會爲頁面根據屏幕自動添加<meta name='viewport' >標籤,
     * 動態控制initial-scale,maximum-scale,minimum-scale等屬性的值。
     * 安裝完成之後再入口index.js頁面 import lib-flexible
     * 注意事項(important): 由於flexible會動態給頁面header中添加<meta name='viewport' >標籤,
     * 所以務必請把目錄 public/index.html 中的這個標籤刪除!!!
     */
 
     /**
      * [postcss-px2rem]
      * npm install postcss-px2rem --save
      * postcss-px2rem會將px轉換爲rem,rem單位用於適配不同寬度的屏幕,
      * 根據<html>標籤的font-size值來計算出結果,1rem=html標籤的font-size值。
      */
 
    // addPostcssPlugins([
    //   require("postcss-px2rem")({ remUnit: 37.5 })
    // ])
 
    /**
     * [description]
     * 溫馨提示: remUnit這個配置項的數值是多少呢??? 通常我們是根據設計圖來定這個值,原因很簡單,便於開發。
     * 假如設計圖給的寬度是750,我們通常就會把remUnit設置爲75,這樣我們寫樣式時,可以直接按照設計圖標註的寬高來1:1還原開發。
     * 那爲什麼你在這裏寫成了37.5呢???那我們後面專門來講!
     * 之所以設爲37.5,是爲了引用像mint-ui這樣的第三方UI框架,因爲第三方框架沒有兼容px2rem ,
     * 將remUnit的值設置爲設計圖寬度(這裏爲750px)75的一半,即可以1:1還原mint-ui的組件,否則會樣式會有變化,例如按鈕會變小。
     * 既然設置成了37.5 那麼我們必須在寫樣式時,也將值改爲設計圖的一半。
     */
 );

新建rem.js文件

const baseSize = 32
// 設置 rem 函數
function setRem () {
  // 當前頁面寬度相對於 750 寬的縮放比例,可根據自己需要修改。
  const scale = document.documentElement.clientWidth / 750
  // 設置頁面根節點字體大小
  document.documentElement.style.fontSize = (baseSize * Math.min(scale, 2)) + 'px'
}
// 初始化
setRem()
// 改變窗口大小時重新設置 rem
window.onresize = function () {
  setRem()
}

在src目錄下的index.js引入rem.js

前端本地proxy的配置

在src目錄下新建文件setupProxy.js(注意文件名一定要是這個名字,不要問什麼,cra現在廢棄了proxy對象配置的方式,將其作爲單獨模塊。解析就是按 src/setupProxy.js這個路徑)

安裝http代理相關包http-proxy-middleware

npm install http-proxy-middleware --save-dev
或者
yarn add http-proxy-middleware -D

配置如下

const proxy = require('http-proxy-middleware')

module.exports = function(app) {
  app.use(
    proxy('/api', {
      target: 'http://xx.xx.xx.xx:8000/',
      changeOrigin: true,
      pathRewrite: {
        '^/api': ''
      }
    })
  )
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章