激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - React - 如何不使用eject修改create-react-app的配置

如何不使用eject修改create-react-app的配置

2022-02-28 16:38胡哥有話說 React

許多剛開始接觸create-react-app框架的同學,不免都會有個疑問:如何在不執行eject操作的同時,修改create-react-app的配置。

一、為啥不建議執行eject

1.執行eject產生了什么變化?

create-react-app框架本身將webpack、babel的相關配置封裝在了react-scripts中,執行yarneject后,會將webpack、babel等配置暴露在config目錄下,同時scripts目錄下會有新的命令文件更新,package.json文件中scripts命令同步更新。

2.執行eject帶來了什么問題?

首先,執行eject是不可逆的,復雜的webpack等配置由框架本身轉交給用戶自己進行維護了。

其次,在版本迭代時,如果更新了react、react-scripts、eslint、tsconfig等依賴,有可能會引起版本依賴的問題,即使我們按錯誤信息修復了之后,項目還是無法運行。

所以我們一般不太建議使用yarneject的方式暴露create-react-app框架的配置。

二、有需求咋解決

實際開發中,我們還是需要更新webpack、babel的配置,比如:

  • antd的按需加載;
  • 配置css預處理器-less;
  • 設置alias、externals;
  • 生產環境打包-去除console.log、debugger;
  • 打包結果優化分析;
  • 打包增加進度條提示;

前方高能預警~

yarn add react-app-rewired customize-c來完成配置的擴展~

這里劃重點,記住要考呦~

我們劃分幾個步驟,來一一實現:

下載安裝依賴

?
1
yarn add react-app-rewired customize-cra -D

一般現在使用的版本是react-app-rewired@^2.1.8、customize-cra@^1.0.0

配置package.json的命令

?
1
2
3
4
5
6
"scripts": {
-   "start": "react-scripts start",
+   "start": "react-app-rewired start",
-   "build": "react-scripts build",
+   "build": "react-app-rewired build",
}

在根目錄下配置config-overrides.js文件

?
1
module.exports = {}

完成了基礎配置后,我們在config-overrides.js中進行詳細配置,解決我們上面的需求問題。

1.antd的按需加載

安裝依賴:

?
1
yarn add antd -D

配置

?
1
2
3
4
5
6
7
8
9
10
cosnt { override, fixBabelImports } = require('customize-cra');
module.exports = override(
    fixBabelImports(
    "import",
    {
      "libraryName": "antd",
      "libraryDirectory": "es",
      "style": "css"
    }
  )

2.配置css預處理器-less

為啥在這里只強調了less呢,因為create-react-app中內置了sass/scss的預處理器,只需要使用時安裝相關的依賴就可以了(運行時,根據提示缺失的包進行安裝即可)。

?
1
yarn add sass -D

接下來我們來less的是如何支持的

安裝依賴:

?
1
yarn add less less-loader@7.3.0 -D

注意這里less-loader的版本less-loader@7.3.0,如果是最新的版本和上面的react-app-rewired和customize-cra版本配合配置時有問題,所以使用了低版本的。

less-loader的最新版本其實是為了配合webpack@5.0使用的。

配置

?
1
2
3
4
5
6
7
8
9
const { override, addLessLoader } = require('customize-cra');
module.exports = override(
addLessLoader({
// 這里可以添加less的其他配置
lessOptions: {
    // 根據自己需要配置即可~
    }
})
);

3.設置alias、externals;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
const { override, addWebpackAlias } = require('customize-cra');
const path = require('path');
module.exports = override(
  // alias
addWebpackAlias({
    // 加載模塊的時候,可以使用“@”符號來進行簡寫啦~
    '@': path.resolve(__dirname, './src/')
  }),
  // externals
  addWebpackExternals({
    // 注意對應的在public/index.html引入jquery的遠程文件地址
    "jQuery": "jQuery"
  })

4.生產環境打包-去除console.log、debugger;

安裝依賴

?
1
yarnadduglifyjs-webpack-plugin-D

配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const { override, addWebpackPlugin } = require('customize-cra');
const  UglifyJsPlugin = require('uglifyjs-webpack-plugin');
module.exports = override(
    // 注意是production環境啟動該plugin
    process.env.NODE_ENV === 'production' && addWebpackPlugin(
    new UglifyJsPlugin({
        // 開啟打包緩存
        cache: true,
        // 開啟多線程打包
        parallel: true,
        uglifyOptions: {
            // 刪除警告
            warnings: false,
            // 壓縮
            compress: {
                // 移除console
                drop_console: true,
                // 移除debugger
                drop_debugger: true
            }
        }
    })
  )

 

5.打包結果優化分析;

安裝依賴

?
1
yarnaddwebpack-bundle-analyzercross-env-D

cross-env用于配置環境變量

配置

?
1
2
// package.json文件
"scripts": { "build:analyzer": "cross-env ANALYZER=true react-app-rewired build" }

 

?
1
2
3
4
5
6
7
// config-overrides.js
const { override, addWebpackPlugin } = require('customize-cra');
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
module.exports = override(
  // 判斷環境變量ANALYZER參數的值
    process.env.ANALYZER && addWebpackPlugin(new BundleAnalyzerPlugin())
)

6.打包增加進度條提示;

安裝依賴

?
1
yarnaddprogress-bar-webpack-plugin-D
?
1
2
3
4
5
const { override, addWebpackPlugin } = require('customize-cra');
const ProgressBarPlugin = require('progress-bar-webpack-plugin');
module.exports = override(
    addWebpackPlugin(new ProgressBarPlugin())
)

以上就是我們實現幾個需求的配置。我們來看看完整的config-overrides.js文件。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// config-overrides.js
cosnt { override, fixBabelImports, addWebpackPlugin, addLessLoader, addWebpackAlias, addWebpackExternals } = require('customize-cra');
const path = require('path');
const  UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
const ProgressBarPlugin = require('progress-bar-webpack-plugin');
module.exports = override(
    fixBabelImports(
    "import",
    {
            "libraryName": "antd",
      "libraryDirectory": "es",
      "style": "css"
    }
  ),
  addLessLoader({
        // 這里可以添加less的其他配置
        lessOptions: {
        // 根據自己需要配置即可~
    }
    }),
  // alias
    addWebpackAlias({
    // 加載模塊的時候,可以使用“@”符號來進行簡寫啦~
    '@': path.resolve(__dirname, './src/')
  }),
  // externals
  addWebpackExternals({
    // 注意對應的在public/index.html引入jquery的遠程文件地址
    "jQuery": "jQuery"
  }),
  // 注意是production環境啟動該plugin
    process.env.NODE_ENV === 'production' && addWebpackPlugin(
    new UglifyJsPlugin({
        // 開啟打包緩存
        cache: true,
        // 開啟多線程打包
        parallel: true,
        uglifyOptions: {
            // 刪除警告
            warnings: false,
            // 壓縮
            compress: {
                // 移除console
                drop_console: true,
                // 移除debugger
                drop_debugger: true
            }
        }
    })
  ),
  // 判斷環境變量ANALYZER參數的值
    process.env.ANALYZER && addWebpackPlugin(new BundleAnalyzerPlugin()),
  addWebpackPlugin(new ProgressBarPlugin())
)

到此這篇關于如何不使用eject修改create-react-app的配置的文章就介紹到這了,更多相關修改create-react-app的配置內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/justbecoder/p/14649623.html

延伸 · 閱讀

精彩推薦
  • ReactReact+Ant Design開發環境搭建的實現步驟

    React+Ant Design開發環境搭建的實現步驟

    這篇文章主要介紹了React+Ant Design開發環境搭建的實現步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    qq_3341488311802022-02-24
  • ReactReactRouter的實現方法

    ReactRouter的實現方法

    這篇文章主要介紹了ReactRouter的實現,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    WindrunnerMax6202022-01-06
  • React100行代碼實現React核心調度功能

    100行代碼實現React核心調度功能

    想必大家都知道React有一套基于Fiber架構的調度系統,本文會用100行代碼實現這套調度系統,讓你快速了解React的調度原理。...

    魔術師卡頌10672021-12-16
  • ReactReact html中使用react的兩種方式

    React html中使用react的兩種方式

    這篇文章主要介紹了React html中使用react的兩種方式,本文給大家提到了React pwa的配置代碼,給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒...

    愚公搬代碼6292022-02-23
  • ReactReact Hook的使用示例

    React Hook的使用示例

    這篇文章主要介紹了React Hook的使用示例,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下...

    鵬廠搬磚工7182022-02-23
  • React詳解React中共享組件邏輯的三種方式

    詳解React中共享組件邏輯的三種方式

    這篇文章主要介紹了詳解React中共享組件邏輯的三種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    Null20203662022-01-12
  • React詳解react應用中的DOM DIFF算法

    詳解react應用中的DOM DIFF算法

    這篇文章主要介紹了react應用中的DOM DIFF算法,幫助大家更好的理解和學習使用react,感興趣的朋友可以了解下...

    time_w6232022-02-25
  • React深入理解React Native核心原理(React Native的橋接(Bridge)

    深入理解React Native核心原理(React Native的橋接(Bridge)

    這篇文章主要介紹了深入理解React Native核心原理(React Native的橋接(Bridge),本文重點給大家介紹React Native的基礎知識及實現原理,需要的朋友可以參考下...

    Gavell9562022-02-23
主站蜘蛛池模板: 亚洲电影免费观看国语版 | 最新欧美精品一区二区三区 | 中文字幕在线观看网址 | 福利一区二区三区视频在线观看 | 亚洲成人激情av | 国产一级毛片a | 狠狠干精品视频 | 亚洲第一综合色 | 欧美成在线视频 | 九九热在线免费观看视频 | 天天草天天爱 | 精品在线观看一区二区 | 最新日韩在线观看视频 | 国产手机国产手机在线 | 91福利国产在线观一区二区 | 亚洲精品aⅴ中文字幕乱码 欧美囗交 | 欧美日韩在线看片 | 中文字幕www. | av在线免费观看网 | 在线成人毛片 | 国产精品久久久久久久久久10秀 | 色中色激情影院 | 在线中文日韩 | 久久精品视频一区二区三区 | 国产亚洲精品精 | 草人人 | 国产v综合v亚洲欧美久久 | 久草热久 | 欧日一级片 | 久久精品综合视频 | 欧美精品123区| 欧美精品一区二区性色 | 日本精品免费观看 | 亚洲日本韩国在线观看 | 在线视频观看一区二区 | www.91视频com | 国内xxxx乱子另类 | 亚洲一区播放 | 综合国产在线 | 欧美无极品| 免费国产不卡午夜福在线 |