我使用React.lazy试图将一些代码从我的主应用程序中分离出来,但它不能以我预期的方式工作,而且我在弄清楚如何调试时遇到了麻烦.

我的代码类似于:

// index.js

import React from 'react';
import { LibraryUtils } from './library/utils';

const Component = React.lazy(() => import('./component'));
...

// component.js

import React from 'react';
import LibraryComponent from './library/component';
...

我想要的是:

  • Vendors.chunk.js:react
  • Main.chunk.js:index.js
  • Main-1.chunk.js:Component.js
  • 库-0.chunk.js:库/utils
  • 库-1.chunk.js:库/组件
  • Index.html:main.chunk.js,库-0.chunk.js,vendors.chunk.js
  • 异步块:main-1.chunk.js,库-1.chunk.js

我得到的是:

  • Vendors.chunk.js:react
  • Main.chunk.js:index.js + component.js
  • Js:库/utils+库/组件
  • Index.html:main.chunk.js、Library.chunk.js、vendors.chunk.js
  • 异步块:无

因此,我的初始页面加载需要加载所有的JS,因此性能较差.

我如何迫使webpack将library拆分成多个块,以便我可以利用异步块?更好的是,我如何开始调试这样的东西?

我的配置如下所示:

splitChunks: {
    chunks: 'all',
    cacheGroups: {
        library: {
            test: /[\\/]library[\\/]/,
        },
    },
}

推荐答案

问题是意外地包含了babel-plugin-dynamic-import-node,这会将动态导入(异步加载所需的)转换为 node 环境的常规要求,从而防止生成任何异步块.解决方案是删除它(或者只在运行单元测试时包含它).

Reactjs相关问答推荐

URL参数和React路由中的点

替换谷歌 map api默认信息窗口与自定义

如何访问子集合中的文档?

如何在与AntD的react 中限制文件上传和显示消息?

获取未捕获的错误:Gatsby生产版本上的最小化react 错误#418

蚂蚁 Select .列表弹出窗口不会';有时不会出现

在 useSelector() 中使用 array.map() 如何导致组件在分派操作时重新渲染?

如何根据ReactJS中元素列表中的布尔值仅显示一次值

从 redux 调用UPDATE_DATA操作时状态变得未定义

我可以在加载器函数中多次 fetch() 并使用一次 useloaderdata() 提取它吗?

部署到github pages时请求路径错误

如何在悬停时更改 MUI 卡内容

Redux Toolkit 配置,是否适用于全栈应用程序?

如何使用 React 更改 Material UI 中 ButtonGroup 的 colored颜色 ?

一周前刚开始学习React,一直在调试为什么输入框在每次输入后都没有焦点

使用 React Router v6 监听来自不同组件的组件状态变化

更新 Next.js 路由查询更改的状态会导致无限循环

react 测试显示错误的结果

在 Reactjs 中状态发生变化时渲染一个新组件而不替换旧组件

React useEffect hooks return () => cleanup() vs return cleanup