国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

react create-react-app v5配置 px2rem (不暴露 eject方式)

這篇具有很好參考價(jià)值的文章主要介紹了react create-react-app v5配置 px2rem (不暴露 eject方式)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

環(huán)境信息:

create-react-app v5
“react”: “^18.2.0”
“postcss-plugin-px2rem”: “^0.8.1”

配置步驟:

不暴露 eject 配置自己的webpack:
1.下載react-app-rewired 和 customize-cra-5

npm install react-app-rewired customize-cra-5 --save-dev

2.在項(xiàng)目根目錄創(chuàng)建一個(gè)config-overrides.js 文件

3.安裝 postcss-plugin-px2rem 和 lib-flexible (注意這里安裝 postcss-px2rem、px2rem這類都行,都是 px2rem衍生的庫(kù),不過(guò)不同的庫(kù)具體配置不一樣,建議查看文檔具體有哪些參數(shù)。查看方法可以去 npm 官網(wǎng) 搜索包名,查看詳情即可,或者問(wèn) ai 比如: 文心,gpt)

cnpm install postcss-plugin-px2rem  lib-flexible --save

4.配置config/webpack.config.js

加上這段代碼重寫addPostcssPlugins 方法:

// 重寫 addPostcssPlugins 方法
const addPostcssPlugins = plugins => (config) => {
  const rules = config.module.rules.find(rule => Array.isArray(rule.oneOf)).oneOf;
  rules.forEach(r => r.use
      && r.use.forEach((u) => {
        if (u.options && u.options.postcssOptions && u.options.postcssOptions.ident === 'postcss') {
          if (!u.options.postcssOptions.plugins) {
            u.options.postcssOptions.plugins = plugins;
          }
          if (u.options.postcssOptions.plugins) {
            const originalPlugins = u.options.postcssOptions.plugins;
            u.options.postcssOptions.plugins = [originalPlugins, ...plugins];
          }
        }
      }));
  return config;
};

然后 使用配置:

addPostcssPlugins([['postcss-pxtorem', {
    rootValue: 37.5,
    propList: ['*'],
  }]]),

或者 :

 addPostcssPlugins([['postcss-px2rem-exclude', {
    remUnit: 37.5,
    exclude: /node_modules/i,
  }]]),

4.在 src/index.js(入口文件引入 import ‘lib-flexible’; )
react create-react-app v5配置 px2rem (不暴露 eject方式),create-react-app v5,React,react.js,前端,前端框架
5.public/index.html 里 注釋調(diào) meta 和加上 一段兼容ipad和ipad pro 的兼容代碼。

注釋掉(注釋的原因是 lib-flexible 會(huì)自動(dòng)創(chuàng)建 meta):

<meta name="viewport" content="width=device-width, initial-scale=1" />

在 head里加上(ipad和ipad pro ):

<!-- 淘寶彈性布局方案lib-flexible不兼容ipad和ipad pro的解決方法 -->
    <script>
    /(iPhone|iPad|iPhone OS|Phone|iPod|iOS)/i.test(navigator.userAgent)&&(head=document.getElementsByTagName('head'),viewport=document.createElement('meta'),viewport.name='viewport',viewport.content='target-densitydpi=device-dpi, width=480px, user-scalable=no',head.length>0&&head[head.length-1].appendChild(viewport));
    </script>

這段代碼用于檢測(cè)用戶是否正在使用iPhone、iPad、iPod或iOS等蘋果設(shè)備。如果是,它將創(chuàng)建一個(gè)新的視口元標(biāo)簽,并添加到HTML文檔的頭部。視口元標(biāo)簽的內(nèi)容設(shè)置為 ‘target-densitydpi=device-dpi, width=480px, user-scalable=no’,這意味著它會(huì)嘗試讓頁(yè)面在各種設(shè)備上看起來(lái)相似,頁(yè)面的寬度被設(shè)置為480px,并且用戶不能手動(dòng)縮放頁(yè)面。

我的 index.html 代碼如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
    <!-- <meta name="viewport" content="width=device-width, initial-scale=1" /> -->
    <meta name="theme-color" content="#000000" />
    <meta
      name="description"
      content="Web site created using create-react-app"
    />
    <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
    <!--
      manifest.json provides metadata used when your web app is installed on a
      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
    -->
    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
    <!--
      Notice the use of %PUBLIC_URL% in the tags above.
      It will be replaced with the URL of the `public` folder during the build.
      Only files inside the `public` folder can be referenced from the HTML.

      Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
      work correctly both with client-side routing and a non-root public URL.
      Learn how to configure a non-root public URL by running `npm run build`.
    -->
    <title>React App</title>
    <!-- 淘寶彈性布局方案lib-flexible不兼容ipad和ipad pro的解決方法 -->
    <script>
    /(iPhone|iPad|iPhone OS|Phone|iPod|iOS)/i.test(navigator.userAgent)&&(head=document.getElementsByTagName('head'),viewport=document.createElement('meta'),viewport.name='viewport',viewport.content='target-densitydpi=device-dpi, width=480px, user-scalable=no',head.length>0&&head[head.length-1].appendChild(viewport));
    </script>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
    <!--
      This HTML file is a template.
      If you open it directly in the browser, you will see an empty page.

      You can add webfonts, meta tags, or analytics to this file.
      The build step will place the bundled scripts into the <body> tag.

      To begin the development, run `npm start` or `yarn start`.
      To create a production bundle, use `npm run build` or `yarn build`.
    -->
  </body>
  
</html>

react create-react-app v5配置 px2rem (不暴露 eject方式),create-react-app v5,React,react.js,前端,前端框架
6.重新運(yùn)行 npm start 審查元素 看看 px 是不是被轉(zhuǎn)換成了rem。如果轉(zhuǎn)換成功說(shuō)明,配置成功了。
可以在 App.js 里加上一個(gè)div然后在 App.css 里寫上一個(gè)width,height然后 用到 div上。

.box{
  width: 100px;
  height: 100px;
  background: red;
}

react create-react-app v5配置 px2rem (不暴露 eject方式),create-react-app v5,React,react.js,前端,前端框架
運(yùn)行之后的效果截圖:
從100px轉(zhuǎn)換成了1.333rem ,當(dāng)切換時(shí),他也跟著變大變小。
react create-react-app v5配置 px2rem (不暴露 eject方式),create-react-app v5,React,react.js,前端,前端框架

rootValue 的計(jì)算方式 :

rootValue=設(shè)計(jì)圖的寬度/10
我是 375*812的設(shè)計(jì)圖 所以 就是 375/10=37.5
計(jì)算rem值時(shí),應(yīng)該將屏幕寬度除以10作為基準(zhǔn)值。

postcss-plugin-px2rem 詳細(xì)配置:

postcss-plugin-px2rem是一個(gè)PostCSS插件,用于將px單位轉(zhuǎn)換為rem單位。該插件提供了以下參數(shù):

rootValue:指定根元素字體大小的值,默認(rèn)為16。該值用于將px轉(zhuǎn)換為rem,例如,當(dāng)rootValue設(shè)置為16時(shí),10px會(huì)被轉(zhuǎn)換為0.625rem。

unitPrecision:指定轉(zhuǎn)換后的rem值保留的小數(shù)位數(shù),默認(rèn)為5。

propList:指定需要轉(zhuǎn)換的CSS屬性,默認(rèn)為[‘*’],表示所有屬性都會(huì)被轉(zhuǎn)換。你可以將其設(shè)為只轉(zhuǎn)換某些屬性,例如[‘font-size’]只轉(zhuǎn)換字體大小屬性。

selectorBlackList:指定不需要轉(zhuǎn)換的選擇器,可以是字符串或正則表達(dá)式。例如,你可以將其設(shè)置為[‘.no-rem’]來(lái)防止某些元素被轉(zhuǎn)換。

replace:指定是否替換原始的px值,默認(rèn)為true。如果設(shè)置為false,則會(huì)在原始值后面添加轉(zhuǎn)換后的rem值,例如10px會(huì)被轉(zhuǎn)換為10px /* 0.625rem */。

mediaQuery:指定是否在媒體查詢中也進(jìn)行轉(zhuǎn)換,默認(rèn)為false。

minPixelValue:指定最小轉(zhuǎn)換單位的px值,默認(rèn)為0。如果設(shè)置為2,則不會(huì)將1px轉(zhuǎn)換為0.0625rem等非常小的值。

以下是一個(gè)postcss-plugin-px2rem插件的配置示例:

const px2rem = require('postcss-plugin-px2rem');
const postcssOptions = {
  plugins: [
    px2rem({
      rootValue: 16,
      unitPrecision: 5,
      propList: ['*', '!font-size'],
      selectorBlackList: ['.no-rem'],
      replace: true,
      mediaQuery: false,
      minPixelValue: 0
    })
  ]
};

在上述示例中,我們將根元素的字體大小設(shè)置為16,保留5位小數(shù),只轉(zhuǎn)換除font-size以外的所有屬性,不轉(zhuǎn)換帶有.no-rem類名的元素,替換原始的px值,不在媒體查詢中進(jìn)行轉(zhuǎn)換,最小轉(zhuǎn)換單位的px值為0。

完整的配置代碼:

addWebpackAlias和 addLessLoader 你可以忽略。前者是 別名 src 可以寫成@ ,后者是 可以使用less 語(yǔ)法。

const {
  override,
  addLessLoader,
  // addPostcssPlugins,
  fixBabelImports,
  addWebpackAlias,
} = require("customize-cra-5");
const path = require("path");
// 重寫 addPostcssPlugins 方法
const addPostcssPlugins = plugins => (config) => {
  const rules = config.module.rules.find(rule => Array.isArray(rule.oneOf)).oneOf;
  rules.forEach(r => r.use
      && r.use.forEach((u) => {
        if (u.options && u.options.postcssOptions && u.options.postcssOptions.ident === 'postcss') {
          if (!u.options.postcssOptions.plugins) {
            u.options.postcssOptions.plugins = plugins;
          }
          if (u.options.postcssOptions.plugins) {
            const originalPlugins = u.options.postcssOptions.plugins;
            u.options.postcssOptions.plugins = [originalPlugins, ...plugins];
          }
        }
      }));
  return config;
};

module.exports = override(
  addLessLoader({
    lessOptions: {
      javascriptEnabled: true,
      // modifyVars: { '@primary-color': '#1DA57A' }, // 你的主題色
    },
  }),
  addPostcssPlugins([['postcss-pxtorem', {
    rootValue: 37.5,
    propList: ['*'],
  }]]),
  // addPostcssPlugins([['postcss-px2rem-exclude', {
  //   remUnit: 37.5,
  //   exclude: /node_modules/i,
  // }]]),
  addWebpackAlias({
    "@": path.resolve("src"),
  })
);

總結(jié):

我是根據(jù) issues里的回答寫出來(lái)的具體可參考:
react項(xiàng)目:在configoveride.js中addPostcssPlugins添加postcss-pxtorem無(wú)效
react create-react-app v5配置 px2rem (不暴露 eject方式),create-react-app v5,React,react.js,前端,前端框架
其他配置可以參考:
react create-react-app v5 從零搭建項(xiàng)目(不暴露 eject)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-726959.html

到了這里,關(guān)于react create-react-app v5配置 px2rem (不暴露 eject方式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用create-react-app創(chuàng)建react項(xiàng)目

    全局安裝create-react-app 使用create-react-app創(chuàng)建一個(gè)項(xiàng)目 如果不想全局安裝,可以直接使用npx 這需要等待一段時(shí)間,這個(gè)過(guò)程實(shí)際上會(huì)安裝三個(gè)東西 react: react的頂級(jí)庫(kù) react-dom: 因?yàn)閞eact有很多的運(yùn)行環(huán)境,比如app端的react-native, 我們要在web上運(yùn)行就使用react-dom react-scripts: 包含運(yùn)

    2024年02月11日
    瀏覽(21)
  • 【React】02.create-react-app基礎(chǔ)操作

    【React】02.create-react-app基礎(chǔ)操作

    2023年最新珠峰React全家桶【react基礎(chǔ)-進(jìn)階-項(xiàng)目-源碼-淘系-面試題】 有利于團(tuán)隊(duì)協(xié)作開發(fā) 便于組件的復(fù)用:提高開發(fā)效率、方便后期維護(hù)、減少頁(yè)面中的冗余代碼 業(yè)務(wù)組件:正對(duì)項(xiàng)目需求封裝的 普通業(yè)務(wù)組件:沒(méi)有啥復(fù)用性,只是單獨(dú)拆出來(lái)的一個(gè)模塊 通用業(yè)務(wù)組件:具備

    2024年02月06日
    瀏覽(51)
  • 通用方案px2rem 處理 內(nèi)聯(lián)樣式、element-ui表頭折行、label折行、表單項(xiàng)換行異常

    通用方案px2rem 處理 內(nèi)聯(lián)樣式、element-ui表頭折行、label折行、表單項(xiàng)換行異常

    通用方案-處理element-ui 表單項(xiàng)label折行、換行異常,表頭折行問(wèn)題 背景簡(jiǎn)介:在實(shí)際的生產(chǎn)環(huán)境中,客戶用到的屏幕大大小小分辨率各有異同,但是為了布局的統(tǒng)一和美觀,我們采用了 postcss-px2rem 插件對(duì)element-ui進(jìn)行響應(yīng)式適配處理,大部分問(wèn)題得到了解決,但仍有一些細(xì)枝

    2024年02月08日
    瀏覽(20)
  • React官網(wǎng)力薦Next.js:為何它取代了Create-React-App?

    隨著前端技術(shù)的快速發(fā)展,React作為一款領(lǐng)先的JavaScript庫(kù),不斷推動(dòng)著前端開發(fā)的變革。近期,React官網(wǎng)的一個(gè)顯著變化引起了廣大開發(fā)者的關(guān)注:它不再推薦使用Create-React-App作為構(gòu)建React應(yīng)用的默認(rèn)工具,而是轉(zhuǎn)向了Next.js。 那么,Next.js究竟有何魔力,讓React官網(wǎng)做出如此決

    2024年04月26日
    瀏覽(26)
  • react快速開始(三)-create-react-app腳手架項(xiàng)目啟動(dòng);使用VScode調(diào)試react

    react快速開始(三)-create-react-app腳手架項(xiàng)目啟動(dòng);使用VScode調(diào)試react

    create-react-app(以下簡(jiǎn)稱cra)作為react官方提供的腳手架工具,是目前生成react項(xiàng)目一個(gè)非常常用和主流的工具。很多企業(yè)級(jí)的應(yīng)用搭建也是基于這個(gè)腳手架工具上二次開發(fā) create-react-app腳手架 生成的 package.json中 scripts如下: 我們看到分別是項(xiàng)目的啟動(dòng)開發(fā)環(huán)境,構(gòu)建,測(cè)試的

    2024年02月10日
    瀏覽(31)
  • 使用 create-react-app 搭建項(xiàng)目ts+less+antd+redux+router+eslint+prettier+axios

    使用 create-react-app 搭建項(xiàng)目ts+less+antd+redux+router+eslint+prettier+axios

    當(dāng)前市面上有很多前端框架或者模板、如:umi、dva、antd-design-pro、create-react-app 等一些框架或者模板。 create-react-app 是 react 官方提供的,相對(duì)來(lái)說(shuō)比較干凈一些。 此項(xiàng)目是在 create-react-app 的基礎(chǔ)上進(jìn)行搭架、項(xiàng)目采用 ts 語(yǔ)法 項(xiàng)目整體上會(huì)添加上以下功能: 完整項(xiàng)目代碼 傳

    2024年02月03日
    瀏覽(29)
  • 1-07 React配置postcss-px-to-viewport

    1-07 React配置postcss-px-to-viewport

    移動(dòng)端適配 安裝依賴:在項(xiàng)目根目錄下運(yùn)行以下命令安裝所需的依賴包: 配置代碼 重新啟動(dòng)開發(fā)服務(wù)器:如果你的開發(fā)服務(wù)器正在運(yùn)行,請(qǐng)重新啟動(dòng)它以應(yīng)用新的配置。 之后當(dāng)我們寫px時(shí)會(huì)自動(dòng)轉(zhuǎn)換成vm單位

    2024年02月08日
    瀏覽(23)
  • React導(dǎo)航守衛(wèi)(V5路由)

    下載: 當(dāng)我們進(jìn)行路由跳轉(zhuǎn)的時(shí)候,有時(shí)候需要滿足某種條件才能跳轉(zhuǎn),比如我只有我們登錄成功之后才能到首頁(yè)面,否則就不能到首頁(yè)面,這時(shí)候我們就需要對(duì)路由進(jìn)行攔截。 例如: (1)當(dāng)我們登錄的時(shí)候存儲(chǔ)一個(gè)會(huì)話存儲(chǔ) (2)然后我們給訪問(wèn)頁(yè)面添加一個(gè)判斷 //封裝一個(gè)判

    2024年01月19日
    瀏覽(30)
  • uni-app px與rpx的轉(zhuǎn)換

    第一種轉(zhuǎn)換方法: 由rpx的微信官方介紹可知 rpx(responsive pixel): 可以根據(jù)屏幕寬度進(jìn)行自適應(yīng)。規(guī)定屏幕寬為750rpx。 如在 iPhone6 上,屏幕寬度為375px,共有750個(gè)物理像素,則750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。 由此得知是以750物理像素為基準(zhǔn): px / rpx = screen

    2024年02月11日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包