共计 2286 个字符,预计需要花费 6 分钟才能阅读完成。
vite 配置多页面利用
官网的例子:
在开发过程中,简略地导航或链接到 /nested/ – 将会按预期工作,与失常的动态文件服务器体现统一。
也就是说,如果你的文件夹有如下层级:
{
src: {
pages: {
demo1: {
App.vue
main.ts
},
demo2: {
App.vue
main.ts
},
demo1.html
demo2.html
}
}
}
那么通过 vite 的开发服务器拜访你的页面,须要拜访 localhost:3000/src/pages/demo1.html#/index 这样的链接,打包后 index.html 也会呈现在 dist/src/pages 文件夹下,很不不便。
能够通过配置 vite.config.ts 中的 root 选项解决
我的项目根目录(index.html 文件所在的地位)。能够是一个绝对路径,或者一个绝对于该配置文件自身的相对路径。
// vite.config.js
const {resolve} = require('path')
const {defineConfig} = require('vite')
module.exports = defineConfig({root:'src/pages'})
然而配置了 root 后,vite.config.ts 中的大部分地址都会主动从 root 选项开始,例如:
// vite.config.js
Components({resolvers: [VantResolver()],
dts: 'src/types/components.d.ts' // 这里的地址会被解析为 src/pages/src/types, 导致报错
})
这里的地址会被解析为 src/pages/src/types, 导致报错
no such file or directory, open ‘/xxxxx/src/pages/src/types/components.d.ts’
拼出绝对路径即可:
import {join} from 'path'
const resolve = dir => join(__dirname, dir)
Components({resolvers: [VantResolver()],
dts: resolve('src/types/components.d.ts')
})
此时的 vite.config.ts:
// vite.config.js
const {resolve} = require('path')
const {defineConfig} = require('vite')
module.exports = defineConfig({
root: 'src/pages',
build: {
rollupOptions: {
input: {piat: resolve('src/pages/demo1.html'),
demo: resolve('src/pages/demo2.html')
}
}
}
})
此时开发环境通过 localhost:3000/demo1.html#/index 即可拜访
打包后 demo1.html 也会在 dist 下
vite-plugin-html 配置
vite-plugin-html 依照官网文档配置即可。中文文档
import {defineConfig} from 'vite'
import {createHtmlPlugin} from 'vite-plugin-html'
export default defineConfig({
plugins: [
createHtmlPlugin({
minify: true,
pages: [
{
entry: 'src/main.ts',
filename: 'index.html',
template: 'public/index.html',
injectOptions: {
data: {
title: 'index',
injectScript: `<script src="./inject.js"></script>`,
},
},
},
{
entry: 'src/other-main.ts',
filename: 'other.html',
template: 'public/other.html',
injectOptions: {
data: {
title: 'other page',
injectScript: `<script src="./inject.js"></script>`,
}
},
},
],
}),
],
})
但在多页面利用中,如果指定了 root,vite-plugin-html 会报错,相似问题:github-issue#53
屡次尝试后发现,vite-plugin-html 配置项中的 template,必须在没有 root 配置的状况下配置,而且 应用 resolve 绝对路径会注入失败!
ReferenceError: ejs:7
title is not defined
解决:按环境配置 root
root: mode === 'development' ? 'src/pages' : '',
vite-plugin-html 配置:
pages: [
{entry: resolve('src/pages/demo1/main.ts'), // 多页面的入口文件
filename: 'demo1.html', // 打包后生成的 html 文件名
template: 'src/pages/demo1.html', // 打包和注入应用的模板文件
injectOptions: {
data: {
title: '轻易什么 title',
injectScript: `<script type="text/javascript" src="/anyscript.js"></script>`,
}
}
}
],