require.context 是 webpack 的内置模块,在vite上是无法使用的。vite 上面对应是 import.meta.glob,匹配到的文件默认是懒加载的,通过动态导入实现,并会在构建时分离为独立的 chunk
。大白话就是它为延迟加载。后续如要处理,可通过参数 { eager: true } 来指定,对应的是原 import.meta.globEager(此方法已经弃用)。
const routeFiles = require.context('../router/main', true, /\.ts/)
routeFiles.keys().forEach((key) => {
const route = require('../router/main' + key.split('.')[1])
allRoutes.push(route.default)
})
==>转化为
const routeFiles = import.meta.glob('../router/main/*/*/*.ts', {
eager: true
})
for (const path in routeFiles) {
allRoutes.push(routeFiles[path].default)
}
实现功能是相同的
而网上很多是以下示例,懒加载,后续不需要处理可以搬用
const directives = import.meta.glob('./*/index.js')
for (let dire in directives) {
const direKey = dire.match(/\.\/(.*?)\/index\.js/)[1]
directives[dire]().then((res) => {
const direValue = res.default
app.directive(direKey, direValue)
})
}
文章评论