一、vue 项目
总结:我们想要的目标数据在 modules 对象中每个属性值中的 default 中。
路由文件
1 2 3 4
| export default { path: '/main/system/user', component: () => import('@/pages/system/user/user.vue') }
|
引入方式
1 2 3 4 5 6 7 8
| import * as fooModule from './dir/foo.js' import * as barModule from './dir/bar.js'
const modules = { './dir/foo.js': fooModule, './dir/bar.js': barModule }
|
1、webpack 中
require.context
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function loadLocalRoutes() { const localRoutes: RouteRecordRaw[] = []
const modules = require.context('@/router', true, /\.ts$/)
const keys = modules.keys().filter((key) => key !== './index.ts')
keys.forEach((key) => { const module = modules(key) localRoutes.push(module.default) })
return localRoutes }
|
2、vite 中
import.meta.glob
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function loadLocalRoutes() { const localRoutes: RouteRecordRaw[] = []
const modules = import.meta.glob('@/router/**/*.ts', { eager: true })
const keys = Object.keys(modules).filter((key) => key !== './index.ts')
keys.forEach((key) => { const module = modules[key] localRoutes.push(module.default) })
return localRoutes }
|
二、koa2 项目
路由文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const Router = require('@koa/router')
const { verifyLogin } = require('../middleware/login.middleware.js')
const loginController = require('../controller/login.controller.js')
const userRouter = new Router({ prefix: '/login' })
userRouter.post('/', verifyLogin, loginController.sign)
module.exports = userRouter
|
引入方式
1 2 3 4 5 6 7 8
| const fooModule = require('./dir/foo.js') const barModule = require('./dir/bar.js')
const modules = { './dir/foo.js': fooModule, './dir/bar.js': barModule }
|
1、获取文件路径
常规方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const fileArr = [] const getFileName = function (path) { readdirSync(path, { withFileTypes: true }).forEach((item) => { if (item.isDirectory()) { getFileName(`${path}/${item.name}`) } else { fileArr.push(item.name) } }) }
getFileName(__dirname) console.log(fileArr)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| const handle_routes = function (path, app) { const getFileName = function (path) { readdirSync(path, { withFileTypes: true }).forEach((item) => { if (item.isDirectory()) { getFileName(`${path}/${item.name}`) } else { const Router = require(`${path}/${item.name}`) app.use(Router.routes(), Router.allowedMethods()) } }) } return getFileName(path) }
console.log(handle_routes(__dirname))
|
2、递归注册路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const registerRouter = (app) => { const getFileName = function (path) { readdirSync(path, { withFileTypes: true }).forEach((item) => { if (item.isDirectory()) { getFileName(`${path}/${item.name}`) } else { if (item.name !== 'index.js') { const Router = require(`${path}/${item.name}`) app.use(Router.routes(), Router.allowedMethods()) } } }) } getFileName(__dirname) }
module.exports = registerRouter
|