HTML 5の履歴モードでGithubページの複数ページのVite
実際、1つの方法は、単にpre-render(例えばvite-plugin-ssr)です.
それにもかかわらず、フォールバックを有効にすることが可能です(リダイレクトを設定せずに、それは、Githubページに存在しません)、事前にレンダリングしたくない場合は、JavaScriptのネスを犠牲にします.方法は
それにもかかわらず、フォールバックを有効にすることが可能です(リダイレクトを設定せずに、それは、Githubページに存在しません)、事前にレンダリングしたくない場合は、JavaScriptのネスを犠牲にします.方法は
dist/index.html
にdist/sub/route/index.html
にクローンする.( SSGもMultiple **/index.html
を持っている).import { existsSync, mkdirSync, copyFileSync } from 'fs'
import { resolve as pathResolve, join as pathJoin } from 'path'
function cloneIndexHtmlPlugin(routes: string[] = []): PluginOption {
const name = 'CloneIndexHtmlPlugin'
const outDir = 'dist' // config's `build.outDir`
const src = pathJoin(outDir, 'index.html')
return {
name,
closeBundle: () => {
// routes.push(...)
routes.map((p) => {
const dir = pathResolve(outDir, p)
if (!existsSync(dir)) {
mkdirSync(dir, { recursive: true })
}
const dst = pathJoin(outDir, p, 'index.html')
// It is possible to edit HTML here, too.
copyFileSync(src, dst)
console.log(`${name}: Copied ${src} to ${dst}`)
})
},
}
}
とプラグインをvite.config.ts
// https://vitejs.dev/config/
export default {
base: `/${GITHUB_REPO_NAME}/`
plugins: [cloneIndexHtmlPlugin()],
}
Vue 3とVueルータ4との統合
VueRouter
は、完全なページ再読み込みなしで簡単にナビゲートします;しかし、それは少し余分な設定が必要です- baseURL
.import { createRouter, createWebHistory } from 'vue-router'
export const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
// Define your routes here
],
})
import.meta.glob
とダイナミックにRoute names can be glob.import { createRouter, createWebHistory } from 'vue-router'
export const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
// Does not allow string templating - `${PAGE_DIR}/**/*${PAGE_EXT}` does not work.
...Object.entries(import.meta.glob('../pages/**/*.vue')).map(
([p, component]) => {
const PAGE_DIR = '../pages'
const PAGE_EXT = '.vue'
const PAGE_INDEX = 'index'
let path = p.substring(PAGE_DIR.length, p.length - PAGE_EXT.length)
if (path.endsWith(PAGE_INDEX)) {
path = path.substring(0, path.length - PAGE_INDEX.length - 1)
}
if (!path) {
path = '/'
}
return {
path,
component,
}
},
),
],
})
cloneIndexHtmlPlugin
また、fast-glob
はimport.meta.glob
が使用するものですので、それをコピーします.import { sync as glob } from 'fast-glob'
// ...
const PAGE_EXT = '.vue'
const PAGE_INDEX = 'index'
routes.push(
...glob(`**/*${PAGE_EXT}`, {
cwd: 'src/pages',
})
.map((p) => {
p = p.substring(0, p.length - PAGE_EXT.length)
if (p.endsWith('/' + PAGE_INDEX)) {
p = p.substring(0, p.length - PAGE_INDEX.length - 1)
}
return p
})
.filter((p) => p !== PAGE_INDEX),
)
Reference
この問題について(HTML 5の履歴モードでGithubページの複数ページのVite), 我々は、より多くの情報をここで見つけました https://dev.to/patarapolw/vite-on-github-pages-with-html5-history-mode-283jテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol