React,使用webpack创建最佳生产束

4

今天我深入研究了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应用程序的增长,将捆绑包分割成多个块可能会更好,以便它们可以更快地下载(这是正确的术语吗?)。

问题:

  1. 将应用程序拆分为多个块时需要考虑哪些方面?
  2. 如何将应用程序拆分为多个块?我只需输入多个入口点(如果是这种情况,战术入口点是什么?)吗?
---
1. 当将应用程序拆分成多个块时,需要考虑以下几个方面: - 块之间的依赖关系 - 合理拆分代码,使得每个块都有足够的功能和性能 - 块的加载顺序 - 公共代码的提取
2. 将应用程序拆分为多个块的方法有多种,其中一种常见的方法是使用webpack进行代码拆分。可以通过以下步骤将应用程序拆分为多个块: - 使用`entry`属性定义多个入口点 - 使用`splitChunks`属性对公共代码进行提取 - 使用动态导入语法(例如`import()`)异步加载代码 - 使用webpack插件以更细粒度的方式控制代码拆分

嘿@WillemvanderVeen!你确定需要将捆绑分成多个块吗?因为大多数情况下你不需要这样做。我认为你需要回答的第一个问题是“我真的需要分割我的捆绑包吗?”如果你确实需要拆分你的捆绑,则可以为每个根创建一个捆绑包 :) - Bastien
我不确定您是否需要将捆绑包拆分为多个块。但我在其他地方看到过。例如,Angular应用程序是一个带有多个捆绑包的单个HTML文件。 - Willem van der Veen
是的,拥有多个捆绑包是很常见的事情。但是你为什么想这样做呢?你的应用程序加载速度非常慢吗?如果你确实需要或想要这样做,我认为最好的方法是每个根目录一个捆绑包。 - Bastien
1个回答

1

您不需要有多个入口点。

您可以基于以下内容进行分块:

  • 路由
  • 每个块的最大大小
  • 外部依赖项单独创建块
  • 在适当的情况下,使用动态导入模块

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

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


我们如何在React中基于路由进行分块呢,@Nishant?有什么链接/博客可以参考吗? - Kitwradr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接