全网最详细的vite多页面配置,帮大伙踩坑。

上一篇关于vite的是vue2+vite+vue-cli5 实现vite开发webpack打包
在这个的基础上,现在想实现多页面配置,
网上有很多,但是不包含使用vite-plugin-html的情形,
包含使用vite-plugin-html 的只有一篇文章(虽然两个网站都有,但明显是搬运的)
参考实践,发现存在异常,写这文章的有去实践过吗-=略表怀疑,给个链接吧
Vite多页面应用配置&使用vite-plugin-html向html模板注入数据或标签
里面关于vite-plugin-html的部分是错误的,过会我在这深度解析一下怎么改,为何要这么改。
文件夹路径如下
src/pages/login/main.ts
src/pages/login/App.vue
src/pages/main/main.ts
src/pages/main/App.vue
src/pages/demo1.html
src/pages/demo2.html
老规矩,先上结果代码访问地址为:localhost:port/demo1.html和localhost:port/demo2.html

const { resolve } = require('path')
export default defineConfig(
    {
        root: 'src/pages',
        build: {
            rollupOptions: {
                input: {
                    piat: resolve('src/pages/demo1.html'), //key随意的,不影响
                    demo: resolve('src/pages/demo2.html')  //key随意的,不影响
                }
            }
        },
        plugins: [
            createHtmlPlugin({
                minify: true,
                pages: [{
                    entry: '/login/main.ts', //根据root的设置,
                    template: 'src/pages/demo1.html',
                    filename: 'demo1.html' //名字随意,但必须有
                }, {
                    entry: '/main/main.ts', //根据root的设置,
                    template: 'src/pages/demo2.html',
                    filename: 'demo2.html' //名字随意,但必须有
                },
                ]
            })
        ]
    })

1.先解释resolve的作用,
resolve可以把‘src/pages/demo1.html’转为系统绝对路径,例如C:\项目名\src\pages\demo1.html
因为node运行时需要绝对路径,因此rollupOptions.input中使用的必须是绝对路径

2.然后是input中,对应的key(此处的piat和demo)
这个key可以是任意的,对最终访问路径没有任何影响的

3.root的作用,这个是核心,只要理解了root的作用,就完全明白了vite多页面最重要的细节了
root其实是决定了node server(即,调试用的server)以及最后部署路径的入口。
当root设置为“/src/pages”时,等同于把“/src/pages”替换为“”,即原来的“src/pages/login/main.ts”网络路径为“/login/main.ts”,
这也是为何createHtmlPlugin中的entry为何会这么写
千万不能像那篇文章里写的那样,把系统绝对路径放进去,会报错
nodeserver不允许html中script标签使用文件路径
如果entry设置成path(‘src/pages/login/main.ts’) 最终生成的html中引入的script是类似“C:\项目名\src\pages\login\main.ts”系统文件路径,从而报错

4.最后,也是最重要的一点,createHtmlPlugin的pages中,必须设置filename,名字可以随意,但必须要,否则调试都404,
想想也是,调试其实也是先在内存中生成了对应的文件进行的,这里如果不指定生成的文件名,则会无法生成对应文件,字然都是404(但奇怪的是,这儿的filename名字随便起,最终url中不体现,url始终体现的是src/pages/下的demo1.html和demo2.html,但如果不写,项目启动的确是404找不到。
补充一下,filename名字不可以和template里html的名字一致,否则也会报404

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值