Admin 项目实战(四):约定编程
这是 Admin 练习项目的第四篇,练习如何通过约定优于配置的方式实现页面加载与插件加载。
什么是约定编程
“约定优于配置”是一种计算机编程中的原则,指的是使用约定而非配置的方法来管理系统或应用程序的行为。
这种原则在软件开发中非常常见,尤其是在框架和库的开发中。例如,许多JavaScript框架(如Vue.js和React)都使用约定来规定组件的命名和文件的结构,而不是通过配置文件来实现。这种方法可以使开发人员更加高效地编写代码,同时也可以降低代码的复杂性。
用约定编程加载页面
需求:在 pages 目录下添加新页面能够实现自动加载。
需求:在 pages 目录下添加新页面能够实现自动加载。
手工配置
当前 main.ts 中的配置:
 |     const router = createRouter({
      history: createWebHistory(),
      routes: [
        {
          path: "/",
          component: () => import("~/pages/index.vue"),
        },
        {
          path: "/login",
          component: () => import("~/pages/login.vue"),
        },
      ],
    });
  | 
 
约定编程
安装插件:
修改 vite.config.ts 加载插件:
 |     import Pages from "vite-plugin-pages";
    export default defineConfig({
      //...
      plugins: [
        //...
        Pages({
          extensions: ["vue"],
        }),
      ],
    });
  | 
 
更新 main.ts 的路由:
 |     import routes from "~pages";
    const router = createRouter({
      history: createWebHistory(),
      routes,
    });
  | 
 
这时,启动项目,可以正常访问 index 和 login。在 pages 目录新增页面,比如 abs.vue 也可以正常访问。
注意:默认情况下 typescript 编辑器会对 ~pages 报错,可以修改 tsconfig.json 中的 types 字段,增加为:
 | {
  "types": ["vite/client", "vite-plugin-pages/client"],
}
  | 
 
用约定编程加载组件
需求:在 modules 目录下添加新组件能够实现自动加载。
手工加载
在 main.ts 中逐个加载组件:
 | createApp(App).use(router).use(pinia).mount("#app");
  | 
 
下面以 Pinia 组件为例,介绍如何实现约定加载。
约定加载
编写 Pinia 组件
 |     // src/modules/pinia.ts
    import { createPinia } from "pinia";
    import type { UserModule } from "./types";
    export const install: UserModule = ({ app }) => {
      const pinia = createPinia();
      app.use(pinia);
    };
    // src/modules/types.ts
    import { App } from "vue";
    export type UserModule = (ctx: { app: App }) => void;
  | 
 
支持按照约定加载
遍历 modules 下所有的组件文件,执行 install 方法:
 |     // src/main.ts
    const app = createApp(App);
    app.use(router);
    Object.values(import.meta.globEager("./modules/*.ts")).forEach((i) =>
      i.install?.({ app })
    );
    app.mount("#app");
  | 
 
测试
使用 user store 进行测试,点击按钮可以正确增加计数值。
上一课
Admin 项目实战(五):按需引入
凡本网注明"来源:XXX "的文/图/视频等稿件,本网转载出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如涉及作品内容、版权和其它问题,请与本网联系,我们将在第一时间删除内容! 
作者: 勃纳什 
来源: https://zhuanlan.zhihu.com/p/644430786