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

时间:2018-07-24 15:03:11

标签: javascript reactjs webpack webpack-4

今天,我深入研究了Webpack的内部结构,并设法使用了它的许多有用功能(通过Webpack加载器),例如CSS模块和Babel Transpiler。我想用它来制作一个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文件。但是,随着我的应用程序的增长,最好将捆绑包分成多个块,以便可以更快地下载它们(这是正确的术语吧?)。

问题:

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

1 个答案:

答案 0 :(得分:3)

您不需要多个入口点。

您可以基于

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

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

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