require.context中开启按需加载

最近了解到require.context自动化引入,使用过程中发现了其有两懒加载参数,lazy与lazy-once,看了看文档的资料,感觉有点云里雾里,不是很明白两者间的区别,打算自己尝试一下lazy

const modules = [];
const files = require.context("../views", true, /\.vue$/,'lazy');
files.keys().forEach((item) => {
  const name = item.split("/")[1];
  modules.push({
    path: `/${name}`,
    name,
    component: files(item).default,
  })
});
console.log(modules)

Vue.use(VueRouter)

const routes = [
  {path:'/',redirect: '/home',},
  ...modules
]

路由组件如上写,没有问题
但在公共的一个大组件中引入很多小组件使用这种方式的话,不能加‘lazy’

 const modules = {};
  const files = require.context("../control", true, /\.vue$/);
  files.keys().forEach((item) => {
    const name = item.split("/")[1];
    modules[`her-${name}`] = files(item).default;
  });
 
//加上“lazy”返回的是一个Promise对象了,
  const modules = {};
  const files = require.context("../control", true, /\.vue$/,'lazy');
  files.keys().forEach(async(item) => {
    let com = await files(item)
    console.log(item,com,com.default)
    const name = item.split("/")[1];
    modules[`her-${name}`] = com.default;
  });

此时页面会报错,无奈了,不知道什么原因
image.png

阅读 4.8k
1 个回答
 const modules = {};
  const files = require.context("../control", true, /\.vue$/,'lazy');
  files.keys().forEach((item) => {
    const name = item.split("/")[1];
   modules[`her-${name}`] = ()=>files(item) //直接提供一个返回 Promise 的函数 
  });

require.context中开启按需加载,首先携带'lazy',
提供一个返回 Promise 的函数,
最后在vue注册组件时,直接提供引用地址 components:modules

推荐问题
宣传栏