Vite多页应用中如何正确配置不同页面的入口JS文件?
我用 Vite 搭建一个多页项目,每个页面都有自己的 JS 入口,但打包后发现只有 index.html 的脚本能正常加载,其他页面比如 about.html 引用的 about.js 找不到。我在 vite.config.js 里是这么配的:
export default defineConfig({
build: {
rollupOptions: {
input: {
index: resolve(__dirname, 'src/index.html'),
about: resolve(__dirname, 'src/about.html')
}
}
}
})
结果 about.html 里自动注入的 script 标签路径不对,指向了 /assets/about-xxx.js,但实际生成的文件名却带了 hash,而且路径也不对。是不是还要额外配置什么?
input指向.html文件是对的,但 Vite 会把每个 HTML 当作一个“页面入口”,然后自动解析它里面引用的 JS(通过<script type="module" src="xxx">),而不是你自己去写 JS 文件路径。你现在的配置问题在于:你把
input写成了src/index.html这种形式,但 Vite 默认只会在index.html同级目录下找 JS 文件,而且它注入的<script>标签路径是基于 HTML 文件的相对路径,不是按你预期的/assets/xxx.js来生成的。正确的做法是:
1. 确保每个 HTML 文件里显式写好 JS 的引用路径,比如
about.html里得有<script type="module" src="./about.js"></script>(注意是相对路径)2. 把
input的值改成 JS 文件路径,而不是 HTML —— 对,Vite 官方推荐的是input: { index: 'src/index.js', about: 'src/about.js' },然后每个 JS 文件里再import对应的 HTML(或者用html插件)但如果你坚持用 HTML 做入口(虽然不推荐),那得这样配:
然后确保每个 HTML 文件里引用的 JS 路径是相对路径,比如
about.html里写<script type="module" src="./about.js"></script>,并且about.js放在和about.html同级目录下。但更推荐的、也是我现在的项目在用的方案是:用 JS 做入口,HTML 由
vite-plugin-html或vite-plugin-pages来生成,这样不会出现路径错乱的问题。比如:然后在每个
main.js里:或者更干净的做法是用
vite-plugin-pages,自动按src/pages下的文件生成入口,省心不少。总之你那个路径不对的问题,99% 是因为 HTML 里写的 JS 引用路径是绝对路径(比如
/about.js),或者 JS 文件根本没放在对应位置。改用相对路径 + JS 入口,基本就稳了。