通过 React 延迟导入和 Webpack 不会发生代码拆分

Vai*_*tal 1 javascript typescript reactjs webpack

//webpack dev
const common = require("./webpack.common");
const merge = require("webpack-merge");
const globImporter = require('node-sass-glob-importer');

module.exports = merge(common, {
    mode: "development",
  
    module: {

        rules: [
            {
                test: /\.(sa|sc|c)ss$/,
                use: [
                    { loader: 'style-loader' },
                    { loader: 'css-loader' },
                    {
                        loader: 'postcss-loader',
                        options: {
                            plugins: () => [require('autoprefixer')({
                                'overrideBrowserslist': ['> 1%', 'last 2 versions']
                            })],
                        }
                    },
                    {
                        loader: 'sass-loader', options: {
                            sassOptions: {
                                importer: globImporter()
                            }
                        }
                    }]
            },
        ]
    },
    devServer: {
        // contentBase: path.join(__dirname, 'dist'),
        historyApiFallback: true,
        port: 8081
    }
    
});
Run Code Online (Sandbox Code Playgroud)

//webpack prod
const common = require("./webpack.common");
const path = require("path");
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const merge = require("webpack-merge");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = merge(common, {
    mode: "production",
    output: {
        filename: "main.[contenthash].js",
        path: path.resolve(__dirname, "dist")
    },
    module: {
        rules: [
            {
                test: /\.(sa|sc|c)ss$/,
                use: [
                    { loader:  MiniCssExtractPlugin.loader },
                    { loader: 'css-loader' },
                    {
                        loader: 'postcss-loader',
                        options: {
                            plugins: () => [require('autoprefixer')({
                                'overrideBrowserslist': ['> 1%', 'last 2 versions']
                            })],
                        }
                    },
                    {
                        loader: 'sass-loader', options: {
                            sassOptions: {
                                importer: globImporter()
                            }
                        }
                    }]
                }
        ]
    },
    plugins: [new MiniCssExtractPlugin({
        filename: "./src/css/[name].[contentHash].css"
    },
    ), new CleanWebpackPlugin()]

})
Run Code Online (Sandbox Code Playgroud)

// webpack common
const HTMLWebpackPlugin = require('html-webpack-plugin');

module.exports={
    entry:"./src/index.tsx",
    resolve: {
        // Add '.ts' and '.tsx' as resolvable extensions.
        extensions: [".ts", ".tsx",".js", ".jsx"]
    },
    module:{
        rules:[
            {
                test: /\.ts(x?)$/,
                exclude: /node_modules/,
                use: [
                    {
                        loader: "ts-loader"
                    }
                ]
            },
          
            {
                test:/\html$/,
                use:["html-loader"]
            },
            {
                test:/\.(svg|png|jpe?g|gif)$/i,
                use:{
                    loader:"file-loader",
                    options:{
                        name:"[name].[hash].[ext]",
                        outputPath:"images"
                    }
                }
            }
        ]   
    },
    // externals: {
    //     "react": "React",
    //     "react-dom": "ReactDOM"
    // },
    plugins:[new HTMLWebpackPlugin({
        template:"./src/index.html"
    })]    
}
Run Code Online (Sandbox Code Playgroud)

通过 React 延迟导入和 Webpack 不会发生代码拆分

我想使用 React Suspense 和 Lazy 导入进行代码拆分,我不知道缺少什么,因为没有为我的动态导入组件创建单独的块

请任何人帮助我使用 webpack 4 和 React 版本 16.9

获取以下消息警告控制台


入口点大小限制警告:以下入口点组合资产大小超过了建议的限制 (244 KiB)。这会影响 Web 性能。入口点: main (533 KiB) ./src/css/main.000e3971ce67d214e0d7.css main.5877aa0d0c3e45fb034f.js

webpack 性能建议中的警告:您可以通过使用 import() 或 require.ensure 来延迟加载应用程序的某些部分来限制包的大小。
有关更多信息,请访问https://webpack.js.org/guides/code-splitting/


win*_*iz1 6

tsconfig.json"module": "esnext"