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

标签 javascript reactjs typescript 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
    }
    
});

//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()]

})

// 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"
    })]    
}

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

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

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

获取下面的消息警告控制台

<小时/>

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

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

<小时/>

最佳答案

tsconfig.json中设置"module": "esnext"

关于javascript - 通过 React 延迟导入和 Webpack 不会发生代码分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58669945/

相关文章:

reactjs - tailwind h-screen container is (header amount of height) 离屏幕底部太远

javascript - 如何让我的 reducer 更新状态中对象的一个​​属性?

reactjs - 比 ReactNode 更具体?

javascript - 所有文本框中的协调输入

javascript - webpack.validateSchema 不是函数

javascript - 无法在 typescript 上分配 reducer?

javascript - Angular 2 :RxJS Subject not responding to events

javascript - 用于识别 guid 或数字的正则表达式

javascript - 使用 jasmine 测试 Backbone 关系模型

Javascript:在滚动时添加然后删除超过某个点的类