上一篇关于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