当前位置: 首页 > news >正文

vue模块化导入

vue模块化导入

    • 一、vue2
      • 1.webpack提供的require.context
      • 2.完整代码片段
      • 3.文件对应位置展示图
    • 二、vue3
      • 1.import.meta.globEager
      • 2.import.meta.glob
      • 3.完整代码片段
      • 4.文件对应位置展示图

以下针对vue2、vue3两种不同情况,使用router路由模块化进行举例

一、vue2

1.webpack提供的require.context

const files = require.context("./modules/", true, /\.js$/);

2.完整代码片段

// src/router/routers/index.js
// 创建一个上下文
const files = require.context("./modules/", true, /\.js$/);// 获取匹配的文件路径数组
const filePath = files.keys();const appRouters = []filePath.forEach((path) => {const module = files(path).default;appRouters.push(...module)
});export default appRouters
// src/router/index.js
import Vue from 'vue'
import Router from 'vue-router'
import { constantRouterMap } from '@/config/router.config'
import appRouters from "./routers/index"try {const originalPush = Router.prototype.pushRouter.prototype.push = function push(location) {return originalPush.call(this, location).catch(err => err)}
} catch (e) {
}Vue.use(Router)export default new Router({mode: 'history',base: process.env.VUE_APP_CONTEXT_PATH,scrollBehavior: () => ({ y: 0 }),routes: [...constantRouterMap, ...appRouters]
})

3.文件对应位置展示图

在这里插入图片描述

二、vue3

1.import.meta.globEager

const modules = import.meta.globEager("./modules/*.ts");

2.import.meta.glob

vite glob-import 官方文档

const modules = import.meta.glob("./modules/*.ts", {eager: true,
});

3.完整代码片段

// src/router/routers/index.ts
import type { RouteRecordNormalized } from "vue-router";const modules = import.meta.glob("./modules/*.ts", {eager: true,
});function formatModules(_modules: any, result: RouteRecordNormalized[]) {Object.keys(_modules).forEach((key) => {const defaultModule = _modules[key].default;if (!defaultModule) return;const moduleList = Array.isArray(defaultModule)? [...defaultModule]: [defaultModule];result.push(...moduleList);});return result;
}export const appRoutes: RouteRecordNormalized[] = formatModules(modules, []);
// src/router/index.ts
import { createRouter, createWebHistory } from "vue-router";
import { appRoutes } from "./routers";const routes = [{path: "/",redirect: "/login",},{name: "login",path: "/login",component: () => import("@/views/user/login/index.vue"),meta: {title: "登录",},},...appRoutes,{path: "/:pathMatch(.*)",redirect: "/",},
];const router = createRouter({history: createWebHistory(),routes,
});export default router;

4.文件对应位置展示图

在这里插入图片描述

http://www.dtcms.com/a/306504.html

相关文章:

  • 网络安全学习第16集(cdn知识点)
  • Android调用python库和方法的实现
  • 开源项目:排序算法的多种实现方式
  • DAY15-指针(3)
  • 解决:React Native 中常见的 状态栏遮挡内容
  • python 中 TypeError: self类型对象传入错误解决办法
  • 在职申硕,怎么选适合自己的学科专业呢?
  • 计算机网络1-3:三种交换方式
  • sed编程入门
  • Android RTMP推送|轻量级RTSP服务同屏实践:屏幕+音频+录像全链路落地方案
  • 本地 docker 部署 HAR包分析工具 harviewer
  • 2025年7月技术问答第5期
  • MySQL: with as与with RECURSIVE如何混合使用?
  • 【算法】十大排序算法超深度解析,从数学原理到汇编级优化,涵盖 15个核心维度
  • 专题:2025机器人产业技术图谱与商业化指南|附130+份报告PDF、数据汇总下载
  • C++实战:抖音级视频应用开发精髓
  • LazyLLM教程 | 第2讲:10分钟上手一个最小可用RAG系统
  • [极客时间]LangChain 实战课 -----|(11) 记忆:通过Memory记住客户上次买花时的对话细节
  • macOS 设置 Claude Code
  • 02 NameServer是如何管理Broker集群的
  • 【STM32-HAL】 SPI通信与Flash数据写入实战
  • Elasticsearch(ES)基础语法(笔记)(持续更新)
  • MySQL索引和事务笔记
  • 如何通过项目管理系统提升交付率
  • Kafka 重复消费与 API 幂等消费解决方案
  • IO复用实现并发服务器
  • 【PZ7020-StarLite 入门级开发板】——FPGA 开发的理想起点,入门与工业场景的双重优选
  • 【工具】jsDelivr CDN完全指南:免费高速的开源项目CDN服务
  • Apache Ignite 与 Spring Boot 集成
  • Linux 进程管理与计划任务设置