javascript - 使用内部 for 循环时反应延迟导入不起作用
问题描述
我想创建基于文件夹的路由器管理,并使用 webpackChunkName 将整个页面拆分为块文件。如果我将整个路由声明为静态数组,则块拆分和延迟加载工作正常。但是,当我在 for 循环中使用 React.lazy 导入时,它根本不起作用。它不会根据每条路由拆分任何块文件。
所以这是我的声明:
这就像一个魅力:
links: [
{
id: "about",
path: "/about",
component: lazy(() =>
import(/* webpackChunkName: "About" */ "@/views/About")
),
icon: faExclamationCircle,
},
{
id: "guide",
path: "/guide",
component: lazy(() =>
import(/* webpackChunkName: "Guide" */ "@/views/Guide")
),
icon: faBookReader,
},
],
当我尝试在 for 循环中动态导入时,它根本不起作用......
sections: result[0].pages.map((i) => {
// It throws an error if doesn't have a config file
const config = require(`@/views/sections/${i.section}/config.js`).default;
return {
id: i.section,
icon: config.icon,
groups: config.group,
pages: i.pages.map((x, k) => {
if (x.section === "index.js")
return {
id: i.section,
path: "/" + i.section,
component: lazy(() =>
/* webpackChunkName: "someModule", */
import(`@/views/sections/${i.section}/index.js`)
),
};
return {
id: getCleanPath(x.section),
path:
k === 0
? `/${i.section}`
: getCleanFullPath(i.section, x.section),
component: lazy(() =>
import(
/* webpackChunkName: "someModule" */
`@/views/sections/${i.section}/${x.section}`
)
),
};
}),
};
}),
解决方案
Ups,我使用 require.context 来获取 src 文件夹中的所有文件夹,所以我必须“懒惰”地加载它。这就是为什么 webpack 不会拆分块文件的原因。
// Before
require.context("../views/sections", true, /^(?!.*config\.js$).*\.(js)$/)
// After
require.context("../views/sections", true, /^(?!.*config\.js$).*\.(js)$/, "lazy")
推荐阅读
- google-apps-script - 尝试将 ppt 转换为 Google Slide 时收到转换错误
- mysql - 具有三个 where 条件的 select 查询速度较慢,但具有三个 where 条件中的任意两个条件的相同查询速度较快
- python - 什么时候在 Python 中初始化一个类变量?
- javascript - Does this for loop iterate multiple times?
- python - 将 XML 转换为特定格式的嵌套 JSON 对象
- javascript - 我在我的组件中使用反应引导模式,但它没有通过另一个组件中的 onClick 事件调用打开
- internet-explorer-11 - “盖茨比开发”对 IE11 的支持
- amazon-web-services - aws-cdk 将 Lambda 函数与 CloudFront Web 分配相关联
- c# - 将 Sprite Renderer 宽度设置为特定距离
- .net - AWS 无服务器应用程序 .net 应用程序