Added preload post build script

This commit is contained in:
2025-10-31 19:31:07 +03:30
parent 1fe13e5208
commit d2255cefb7
5 changed files with 85 additions and 38 deletions

View File

@@ -1,44 +1,44 @@
name: Deploy to GitHub Pages
# name: Deploy to GitHub Pages
on:
push:
branches: [main]
pull_request:
branches: [main]
# on:
# push:
# branches: [main]
# pull_request:
# branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
# jobs:
# build-and-deploy:
# runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
# steps:
# - name: Checkout code
# uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
version: 10
run_install: false
# - uses: pnpm/action-setup@v4
# name: Install pnpm
# with:
# version: 10
# run_install: false
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
# - name: Install Node.js
# uses: actions/setup-node@v4
# with:
# node-version: 20
# cache: 'pnpm'
- name: Install dependencies
run: pnpm install
# - name: Install dependencies
# run: pnpm install
- name: Build project
run: DEPLOY_ENV=GH_PAGES pnpm build
# - name: Build project
# run: DEPLOY_ENV=GH_PAGES pnpm build
- name: Copy index.html to 404.html
run: cp dist/index.html dist/404.html
# - name: Copy index.html to 404.html
# run: cp dist/index.html dist/404.html
- name: Deploy to GitHub Pages
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
publish_branch: gh-pages
# - name: Deploy to GitHub Pages
# if: github.event_name == 'push' && github.ref == 'refs/heads/main'
# uses: peaceiris/actions-gh-pages@v4
# with:
# github_token: ${{ secrets.GITHUB_TOKEN }}
# publish_dir: ./dist
# publish_branch: gh-pages

View File

@@ -8,12 +8,13 @@
},
"scripts": {
"dev": "vite",
"build": "run-p type-check \"build-only {@}\" --",
"build": "run-p type-check \"build-only {@}\" -- && npm run inject-preloads",
"preview": "vite preview",
"build-only": "vite build",
"type-check": "vue-tsc --build",
"lint": "eslint . --fix",
"format": "prettier --write src/"
"format": "prettier --write src/",
"inject-preloads": "node scripts/inject-preloads.js"
},
"dependencies": {
"@formkit/auto-animate": "^0.9.0",

42
scripts/inject-preloads.js Executable file
View File

@@ -0,0 +1,42 @@
import fs from 'fs'
import path from 'path'
const distDir = path.resolve('dist')
const manifestPath = path.join(distDir, '.vite/manifest.json')
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'))
const indexPath = path.join(distDir, 'index.html')
let html = fs.readFileSync(indexPath, 'utf-8')
const filesToPreload = new Set()
function collectFiles(entryKey) {
const chunk = manifest[entryKey]
if (!chunk) return
filesToPreload.add(chunk.file)
for (const imp of chunk.imports || []) {
if (imp === 'index.html') continue // skip entrypoint
const dep = manifest[imp]
if (dep) {
filesToPreload.add(dep.file)
collectFiles(imp) // recurse for transitive deps
}
}
}
// automatically find all .vue entries that are dynamic (lazyloaded)
for (const key of Object.keys(manifest)) {
if (key.endsWith('.vue') && manifest[key].isDynamicEntry) {
collectFiles(key)
}
}
for (const f of filesToPreload) {
const tag = `<link rel="modulepreload" href="/${f}">`
if (!html.includes(tag)) {
html = html.replace('</head>', ` ${tag}\n</head>`)
}
}
fs.writeFileSync(indexPath, html)
console.log('Preload tags injected')

View File

@@ -15,3 +15,4 @@ app.use(autoAnimatePlugin)
app.use(MotionPlugin)
app.mount('#app')

View File

@@ -20,4 +20,7 @@ export default defineConfig({
'@': fileURLToPath(new URL('./src', import.meta.url)),
},
},
build: {
manifest: true
},
})