React,使用 webpack 创建最佳的生产包

Posted

技术标签:

【中文标题】React,使用 webpack 创建最佳的生产包【英文标题】:React, creating optimal production bundles with webpack 【发布时间】:2019-01-01 06:30:15 【问题描述】:

今天我深入研究了 Webpack 的内部结构,并设法使用了许多有用的功能(通过 Webpack 加载器),例如 CSS 模块和 Babel 转译器。我想用它来制作一个 React 应用程序(没有create-react-app)。

这是我的配置文件:

const htmlWebPackPlugin = require("html-webpack-plugin");
const path = require('path');

module.exports = 

    entry: 
        main: './src/index.js',
    ,


    output: 
        path: path.resolve(__dirname, 'dist'),
        filename: '[name].js'
    ,

    module: 

        rules: [
            
                test: /\.js|jsx$/,
                exclude: /node_modules/,
                use: 
                    loader: "babel-loader"
                
            ,
            
                test: /\.html$/,
                exclude: /node_modules/,
                use: [
                    
                        loader: "html-loader",
                        options:  minimize: true 
                    
                ]
            ,
            
                test: /\.css$/,
                exclude: /node_modules/,
                use: [
                    
                        loader: 'style-loader'
                    ,
                    
                        loader: 'css-loader',
                        query: 
                            modules: true,
                            localIdentName: '[name]__[local]___[hash:base64:5]'
                        
                    
                ]

            
        ]
    ,
    plugins: [
        new HtmlWebPackPlugin(
            template: "./src/index.html",
            filename: "index.html"
        )
    ]
;

因为我现在有一个入口点,所以我的整个包被转换为一个 JS 文件。但是,随着我的 react 应用程序的增长,最好将捆绑包分成多个块,以便更快地下载它们(这是正确的术语,对吗?)。

问题:

    将应用程序拆分为多个块时需要考虑哪些方面? 如何将应用程序拆分为多个块?我是否只输入多个入口点(如果是这种情况,那么什么是战术入口点?)?

【问题讨论】:

嘿@WillemvanderVeen!你确定你需要把你的包分成多个块吗?因为大多数时候你不需要。我认为您需要回答的第一个问题是Do I really need to split my bundle? 如果您真的需要拆分捆绑包,那么您可以为每个根创建一个捆绑包:) 我不确定您是否需要将捆绑包分成多个块。但是我在其他地方看到过。例如,一个 Angular 应用程序是一个带有多个包的 HTML 文件 是的,拥有多个捆绑包是很常见的事情。但你为什么要这样做?你的应用加载速度很慢吗?如果您真的需要或想要,IMO 最好的方法是每个根都有一个捆绑包。 【参考方案1】:

您不需要有多个入口点。

你可以根据分块

路线 最大大小块 对于外部依赖 有单独的块 在有意义的地方对模块使用动态导入

如果您不确定要使用哪些参数,请使用 webpack 的 splitchunk 插件 (https://webpack.js.org/plugins/split-chunks-plugin/) 的默认值。

然后,您可以尝试自己的自定义设置,以确定最适合您的应用的设置。

【讨论】:

以上是关于React,使用 webpack 创建最佳的生产包的主要内容,如果未能解决你的问题,请参考以下文章

React webpack 包大小很大

react antd 大型生产包

React + Webpack + Material UI 样式在生产中中断

手把手教你用webpack3搭建react项目(开发环境和生产环境)

你如何配置 Webpack 以清除生产缩小的 React 警告?

使用 express 和 babel 在 React 应用程序中配置 Webpack