vue 脚手架页面文件列表读取 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zficode
V2EX    Vue.js

vue 脚手架页面文件列表读取

  •  
  •   zficode 2023-11-04 09:00:48 +08:00 1949 次点击
    这是一个创建于 706 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 vue 搭建的脚手架中,通过 vue-router 标记哪些文件为页面文件,例如:

    const router = new Router({ routes }) const routes = [ ... ] 

    现在想拿到脚手架中哪些文件为路由文件和它的路由信息,包括路由 path 和对应的组件地址。 目前已知方式:

    1. ast 解析,较为麻烦,需要考虑父路由 path 拼接 请问有更好的方式吗
    8 条回复    2023-11-06 02:54:33 +08:00
    xiaoriri666
        1
    xiaoriri666  
       2023-11-04 09:32:49 +08:00
    一般是这么处理的,新建个文件夹,然后所有的静态路由都放在这个文件夹下,然后用 import.meta.glob 导入,参考如下代码
    ```js
    const models = import.meta.glob('./*.js', {eager: true})

    function formatModules(_modules, result) {
    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;
    }
    const staticRouter = formatModules(models, [])

    export default staticRouter
    ```
    alleluya
        2
    alleluya  
       2023-11-04 10:45:15 +08:00
    做这个是想和 react-router 还是 remix 里那个功能一样么? 按照文件路径直接生成 router
    zficode
        3
    zficode  
    OP
       2023-11-04 11:05:09 +08:00
    @alleluya 就是从一个 vue 项目中扫描出哪些文件为路由文件,得到它的路由地址( path)
    kamilic
        4
    kamilic  
       2023-11-04 12:08:54 +08:00
    1. AST 可以的,写代码分析下树。
    2. 另外一种方式,我开个脑洞。我觉得你可以在实际代码的运行时中拿一下 vue-router 的实例,钻进去看看最终生成的路由列表,webpack 和 vite 打包的模块导出应该也会找到文件信息的,但是这个我不确定,可以一试。
    lyc575757
        5
    lyc575757  
       2023-11-04 12:19:48 +08:00 via Android
    可以试试 unplugin-vue-router 这个插件,不需要再写路由配置文件了,会基于文件自动生成路由
    lyc575757
        6
    lyc575757  
       2023-11-04 12:21:57 +08:00 via Android
    @lyc575757 看错需求了 忽略
    leokun
        7
    leokun  
       2023-11-04 13:00:01 +08:00
    在 rollup 和 vite 中都有一个 ResolveIdHook 的钩子,第二个参数就是 importer
    创建一个虚拟模块,内容为「以 importer 为路由入口的文件列表」可能就是你要的东西
    19cm
        8
    19cm  
       2023-11-06 02:54:33 +08:00
    看看这个  https://github.com/arco-design/arco-design-pro-vue/blob/main/arco-design-pro-vite/src/router/routes/index.ts    个人觉得字节这个admin算是写得比较好的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1022 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:57 PVG 06:57 LAX 15:57 JFK 18:57
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86