mirror of
https://github.com/mmahdium/TBW.git
synced 2025-12-20 04:33:54 +01:00
Added preload post build script
This commit is contained in:
70
.github/workflows/deploy.yml
vendored
70
.github/workflows/deploy.yml
vendored
@@ -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
|
||||
|
||||
@@ -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",
|
||||
@@ -45,4 +46,4 @@
|
||||
"vite-plugin-vue-devtools": "^8.0.3",
|
||||
"vue-tsc": "^3.1.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
42
scripts/inject-preloads.js
Executable file
42
scripts/inject-preloads.js
Executable 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 (lazy‑loaded)
|
||||
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')
|
||||
@@ -15,3 +15,4 @@ app.use(autoAnimatePlugin)
|
||||
app.use(MotionPlugin)
|
||||
|
||||
app.mount('#app')
|
||||
|
||||
|
||||
@@ -20,4 +20,7 @@ export default defineConfig({
|
||||
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
||||
},
|
||||
},
|
||||
build: {
|
||||
manifest: true
|
||||
},
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user