最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React腳手架config-overrides.js文件的配置方式

 更新時(shí)間:2023年10月20日 15:07:54   作者:Goat惡霸詹姆斯  
這篇文章主要介紹了React腳手架config-overrides.js文件的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

React腳手架config-overrides.js文件配置

主要講講在react腳手架在不使用eject命令的情況下,如何進(jìn)行webpack的配置。

網(wǎng)上查詢了好多,只有針對(duì)相關(guān)的配置,這次全面的看一看配置。

還是一樣,我們需要插件的幫助:

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

配置package.json:

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

在根目錄下創(chuàng)建文件config-overrides.js,這里主要是由插件customize-cra來(lái)實(shí)現(xiàn),配置包含兩部分,customizer和utilities

const { override, addTslintLoader,addExternalBabelPlugins,addBabelPlugins,addBabelPresets,babelInclude,babelExclude,removeInternalBabelPlugin,fixBabelImports,addDecoratorsLegacy,disableEsLint,useEslintRc,enableEslintTypescript,addWebpackAlias,addWebpackResolve,addWebpackPlugin,addWebpackExternals,addWebpackModuleRule,setWebpackTarget,setWebpackStats,addBundleVisualizer,addBundleVisualizer,adjustWorkbox,useBabelRc,adjustWorkbox,addLessLoader,addPostcssPlugins,disableChunk} = require("customize-cra");
const path = require("path");
 
module.exports = override(
        //customizers
 
        //addTslintLoader(loaderOptions),需要安裝tslint-loader
        addTslintLoader(),
 
        //addExternalBabelPlugins(plugins)/addExternalBabelPlugin(plugin),create-reat-app有2種方式配置babel-loader,一種是默認(rèn)配置,另外一種通過(guò)external loader配置,在這里可以使用addExternalBabelPlugin添加插件,同樣你可以使用addBabelPlugin,作用是一樣的。注意如果添加多個(gè)插件要使用拓展符。
        ...addExternalBabelPlugins(
            "babel-plugin-transform-do-expressions",
            "@babel/plugin-proposal-object-rest-spread"
        ),
 
        //addBabelPlugin(plugin)/addBabelPlugins(plugins)
        ...addBabelPlugins(
            "polished",
            "emotion",
            "babel-plugin-transform-do-expressions"
        ),
 
        //addBabelPreset(preset)/addBabelPresets(...presets)添加babel preset配置,用法如下,與上述的addExternalBabelPlugins寫(xiě)法相同
        ...addBabelPresets(
            [
              "@babel/env",
              {
                targets: {
                  browsers: ["> 1%", "last 2 versions"]
                },
                modules: "commonjs"
              }
            ],
            "@babel/preset-flow",
            "@babel/preset-react"
        ),
 
        //babelInclude(exclude)重寫(xiě)babel-loader的exclude配置
        babelInclude([
            path.resolve("src"), // make sure you link your own source
            path.resolve("node_modules/native-base-shoutem-theme"),
            path.resolve("node_modules/react-navigation"),
            path.resolve("node_modules/react-native-easy-grid")
        ]),
 
        //babelExclude(exclude)重寫(xiě)babel-loader的exclude配置
        babelExclude([path.resolve("src/excluded-folder")]),
 
        //removeInternalBabelPlugin(pluginName)從配置中移除構(gòu)造函數(shù)名稱與pluginname匹配的特定babel插件
        removeInternalBabelPlugin("plugin-name"),
 
        //fixBabelImports(libraryName, options),添加 babel-plugin-import 插件,主要用于按需引入
        fixBabelImports("lodash", {
            libraryDirectory: "",
            camel2DashComponentName: false
        }),
        fixBabelImports("react-feather", {
            libraryName: "react-feather",
            libraryDirectory: "dist/icons"
        }),
 
        //addDecoratorsLegacy()開(kāi)啟修飾符,先安裝@babel/plugin-proposal-decorators插件
        addDecoratorsLegacy(),
 
        //disableEsLint()您可能需要將它與addDecoratorsLegacy一起使用,以便讓裝飾器和導(dǎo)出一起解析。如果你想在EsLint中使用@babel/plugin-proposal-decorators,你可以啟用useEslintRc,如下所述,在你的.eslintrc或package.json中eslintonfig下進(jìn)行以下配置:
            //"parserOptions": {
            //    "ecmaFeatures": {
            //      "legacyDecorators": true
            //    }
            // }
        disableEsLint(),
 
        //useEslintRc(configFile)configFile是一個(gè)可選參數(shù),允許指定ESLint配置文件的確切路徑。配置eslint的規(guī)范
        useEslintRc(configFile),
 
        //enableEslintTypescript()更新Webpack eslint-loader來(lái)檢測(cè).js(x)和.ts(x)文件,并在控制臺(tái)上顯示檢測(cè)錯(cuò)誤/警告。
        enableEslintTypescript(),
 
        //addWebpackAlias(alias)將提供的別名信息添加到webpack的別名部分。傳遞一個(gè)帶有任意數(shù)量條目的對(duì)象文字,整個(gè)對(duì)象將被合并。
        addWebpackAlias({
            '@': path.resolve('./src')
        }),
 
        //addWebpackResolve(resolve)導(dǎo)入文件的時(shí)候可以不用添加文件的后綴名
        addWebpackResolve({
            extensions: ['.tsx', '.ts', '.js', '.jsx', '.json'],
        }),
        
        //addWebpackPlugin(plugin)添加webpack插件,會(huì)被合并到plugins數(shù)組中
        addWebpackPlugin(new MiniCssExtractPlugin()),
 
        //addWebpackExternals(deps) 添加外部依賴,在嘗試將庫(kù)卸載到CDN時(shí)非常有用。addWebpackExternals也可以接受字符串、函數(shù)或正則表達(dá)式。有關(guān)更多信息,請(qǐng)參閱webpack文檔。
        addWebpackExternals({ //如直接以cdn引入的
            react: "React",
            "react-dom": "ReactDom"
            echarts: "window.echarts",
            // highcharts:"window.highcharts"
        }),
 
        //addWebpackModuleRule(rule)將提供的規(guī)則添加到webpack配置的module.rules數(shù)組中
        addWebpackModuleRule({test: /\.txt$/, use: 'raw-loader'}),
 
        //setWebpackTarget(target)為webpack設(shè)置目標(biāo)配置變量。正如webpack文檔中描述的那樣,這可以是一個(gè)字符串或一個(gè)函數(shù)。如: webpack默認(rèn)打包的target是瀏覽器模式。因?yàn)槲易龅氖且粋€(gè)nwjs項(xiàng)目,所以需要生成node-webkit的包。
        setWebpackTarget('node-webkit')
 
        
        //setWebpackStats(stats)設(shè)置webpack的stats屬性。這個(gè)屬性允許你在產(chǎn)品版本中定制Webpack的錯(cuò)誤消息行為。正如webpack文檔中描述的那樣,這可以是一個(gè)字符串或一個(gè)對(duì)象。
        setWebpackStats('error-only'), //或者如下對(duì)象形式
        setWebpackStats({
            warningsFilter: [
                'filter',
                /filter/,
                (warning) => true
            ]
        }),
 
        //addBundleVisualizer(options, behindFlag = false)將bundle可視化插件添加到webpack配置中。確保安裝了webpack-bundle-analyzer。默認(rèn)情況下,傳遞給插件的選項(xiàng)是:
        //{
          //"analyzerMode": "static",
          //"reportFilename": "report.html"
        //}
        addBundleVisualizer({}, true),
 
        //setWebpackOptimizationSplitChunks(target)設(shè)置自定義優(yōu)化。splitChunks配置到你的webpack配置。請(qǐng)謹(jǐn)慎使用此方法,因?yàn)閣ebpack默認(rèn)配置在大多數(shù)時(shí)候是有效的。默認(rèn)情況下,create-react-app中的選項(xiàng)是:
        //{
          //"chunks": "all",
          //"name": false
        //}
        addBundleVisualizer({}, true),
        
        //useBabelRc()啟用你的.babelrc(或.babelrc.js)
        useBabelRc(),
 
        //adjustWorkbox(fn)調(diào)整Workbox配置。傳遞一個(gè)函數(shù),該函數(shù)將與當(dāng)前Workbox配置一起調(diào)用,其中您可以根據(jù)需要更改配置對(duì)象。請(qǐng)看下面的示例。
        adjustWorkbox(wb =>
            Object.assign(wb, {
                skipWaiting: true,
                exclude: (wb.exclude || []).concat("index.html")
            }),
        );
 
        //addLessLoader(loaderOptions)添加less-loader,
        //npm i -D less less-loader
        addLessLoader({
            strictMath: true,
            noIeCompat: true,
            modifyVars: {
              "@primary-color": "#1DA57A", // 例如, 你使用 Ant Design 改變主題色.
            },
            cssLoaderOptions: {}, // .less 文件被使用在 css-loader 選項(xiàng)
            cssModules: {
                localIdentName: "[path][name]__[local]--[hash:base64:5]", 
            },
        }),
        //如果你在CSS模塊中使用TypeScript (npm init react-app my-app——TypeScript),你應(yīng)該編輯react-app-env.d.ts。
        //declare module "*.module.less" {
          //const classes: { [key: string]: string };
          //export default classes;
        //}
        
        //addPostcssPlugins([plugins])添加postCss插件
         addPostcssPlugins([require("postcss-px2rem")({ remUnit: 37.5 })]),
 
        //disableChunk()防止默認(rèn)的靜態(tài)分塊,并強(qiáng)制整個(gè)構(gòu)建到一個(gè)文件中。
        disableChunk(),
 
        //removeModuleScopePlugin()這將刪除CRA插件,防止從src目錄外導(dǎo)入模塊,如果你使用不同的目錄,這很有用。一個(gè)常見(jiàn)的用例是如果您在monorepo設(shè)置中使用CRA,其中您的包在packages/而不是src/下。
        removeModuleScopePlugin(),
 
        //watchAll()當(dāng)應(yīng)用時(shí),CRA將監(jiān)視項(xiàng)目的所有文件,包括node_modules。要使用它,只需應(yīng)用它并使用yarn start運(yùn)行開(kāi)發(fā)服務(wù)器——watch-all
        watchAll(),
 
        //adjustStyleLoaders(callback)逐一找到所有樣式加載器和回調(diào)
        adjustStyleLoaders(({ use: [ , css, postcss, resolve, processor ] }) => {
          css.options.sourceMap = true;         // css-loader
          postcss.options.sourceMap = true;     // postcss-loader
          // when enable pre-processor,
          // resolve-url-loader will be enabled too
          if (resolve) {
            resolve.options.sourceMap = true;   // resolve-url-loader
          }
          // pre-processor
          if (processor && processor.loader.includes('sass-loader')) {
            processor.options.sourceMap = true; // sass-loader
          }
        })       
);

customizer整體配置就是這些。

utilities還有兩個(gè)公共方法:

getBabelLoader(config, isOutsideOfApp)

從提供的配置返回babel加載器。

Create-react-app定義了兩個(gè)Babel配置,一個(gè)用于src/目錄下的js文件,另一個(gè)用于該目錄外的任何js文件。

這個(gè)函數(shù)可以使用isOutsideOfApp參數(shù)。

tap(options)

通過(guò)在控制臺(tái)中或單獨(dú)的文件中打印配置,使用tap幫助您在某些點(diǎn)上識(shí)別配置。

Tap接受一個(gè)帶有next屬性的可選選項(xiàng)對(duì)象:

  • message:配置前要打印的字符串消息
  • dest:寫(xiě)日志的目的文件
const { override, tap, addLessLoader } = require("customize-cra");
 
module.exports = override(
  // Print initial config in the console prepending a message
  tap({ message: "Pre - Customizers" }) 
  /* Your customizers: eg. addLessLoader() */
  addLessLoader()
  // Print final config in a separate file
  tap({ dest: 'customize-cra.log'}) 
)

補(bǔ)充:

另外一種拋出對(duì)象的寫(xiě)法 ,我們想要訪問(wèn)webpack里一些特定模塊:

const {override, fixBabelImports, addLessLoader, overrideDevServer, watchAll} = require('customize-cra')
const packageName = require('./package.json').name
 
 
module.exports = {
 
  'webpack': override(
    (config) => {
      config.output = config.output || {}
      config.output.library = `${packageName}-[name]`
      config.output.libraryTarget = 'umd'
      config.output.jsonpFunction = `webpackJsonp_${packageName}`
      return config
    },
 
    fixBabelImports('import', {
      libraryName: 'antd',
      libraryDirectory: 'es',
      style: true,
    }),
 
    addLessLoader({
      javascriptEnabled: true,
      modifyVars: {
        'primary-color': '#1DA57A',
        'link-color': '#1DA57A',
        'border-radius-base': '2px',
      },
    })
  ),
 
  'devServer': overrideDevServer(
    (config) => {
      config.headers = config.headers || {}
      config.headers['Access-Control-Allow-Origin'] = '*'
      return config
    },
    watchAll()
  )
 
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • React通過(guò)redux-persist持久化數(shù)據(jù)存儲(chǔ)的方法示例

    React通過(guò)redux-persist持久化數(shù)據(jù)存儲(chǔ)的方法示例

    這篇文章主要介紹了React通過(guò)redux-persist持久化數(shù)據(jù)存儲(chǔ)的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • React更新渲染原理深入分析

    React更新渲染原理深入分析

    什么是re-render(重新渲染)?哪些是必要的re-render?哪些是非必要的re-render?如果你對(duì)這些問(wèn)題還不是很明白,那么可以在這篇文章中找到答案
    2022-12-12
  • react hook使用useState更新數(shù)組,無(wú)法更新問(wèn)題及解決

    react hook使用useState更新數(shù)組,無(wú)法更新問(wèn)題及解決

    這篇文章主要介紹了react hook使用useState更新數(shù)組,無(wú)法更新問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 關(guān)于react的代理配置(可配置多個(gè)代理)

    關(guān)于react的代理配置(可配置多個(gè)代理)

    這篇文章主要介紹了關(guān)于react的代理配置(可配置多個(gè)代理),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • react18中react-redux狀態(tài)管理的實(shí)現(xiàn)

    react18中react-redux狀態(tài)管理的實(shí)現(xiàn)

    本文主要介紹了react18中react-redux狀態(tài)管理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • React組件useReducer的講解與使用

    React組件useReducer的講解與使用

    在React函數(shù)式組件中,我們可以通過(guò)useState()來(lái)創(chuàng)建state,這種state創(chuàng)建方式會(huì)給我們返回兩個(gè)東西state和setState()。
    2023-04-04
  • 路由react-router-dom的基本使用教程

    路由react-router-dom的基本使用教程

    在React中,路由是一套映射規(guī)則,是URL路徑與組件的對(duì)應(yīng)關(guān)系。使用React路由,就是配置路徑和組件的對(duì)應(yīng)關(guān)系,這篇文章主要介紹了路由react-router-dom的使用,需要的朋友可以參考下
    2023-02-02
  • React的組件協(xié)同使用實(shí)現(xiàn)方式

    React的組件協(xié)同使用實(shí)現(xiàn)方式

    這篇文章主要介紹了React的組件協(xié)同使用,文中給大家提到在React開(kāi)發(fā)中,有哪些場(chǎng)景的組件協(xié)同?又如何去實(shí)現(xiàn)組件的協(xié)同使用呢?本文都給大家提到,感興趣的朋友跟隨小編一起看看吧
    2021-09-09
  • 淺析history 和 react-router 的實(shí)現(xiàn)原理

    淺析history 和 react-router 的實(shí)現(xiàn)原理

    react-router 版本更新非???但是它的底層實(shí)現(xiàn)原理確是萬(wàn)變不離其中,在本文中會(huì)從前端路由出發(fā)到 react-router 原理總結(jié)與分享,本文對(duì)history 和 react-router實(shí)現(xiàn)原理講解的非常詳細(xì),需要的朋友跟隨小編一起看看吧
    2023-08-08
  • 在React項(xiàng)目中添加吸頂效果的代碼示例

    在React項(xiàng)目中添加吸頂效果的代碼示例

    在大型Web應(yīng)用中,一個(gè)常見(jiàn)的設(shè)計(jì)需求是讓某些組件具有吸頂效果,這意味著當(dāng)頁(yè)面向下滾動(dòng)時(shí),該組件會(huì)保持在屏幕頂部,在本文中,我們將介紹如何在React項(xiàng)目中實(shí)現(xiàn)吸頂效果。我們將首先討論使用原生JavaScript領(lǐng)域的方法來(lái)實(shí)現(xiàn),然后將這些方法與React結(jié)合起來(lái)
    2023-06-06

最新評(píng)論

尚志市| 泗洪县| 邯郸市| 昭通市| 满城县| 连城县| 长海县| 连云港市| 高州市| 盐边县| 新源县| 图木舒克市| 灵台县| 福贡县| 信宜市| 永康市| 天津市| 遂宁市| 双牌县| 铁力市| 弥勒县| 庄河市| 大英县| 维西| 台中县| 临朐县| 图木舒克市| 新平| 固镇县| 扎赉特旗| 兴义市| 赣州市| 三原县| 德州市| 忻州市| 清流县| 海丰县| 宜宾市| 长顺县| 宝鸡市| 新昌县|