chore: global loading of base dependencies

pull/3445/head
Ryan Wang 2022-06-20 15:08:17 +08:00
parent ff03774563
commit ebfbb639a8
5 changed files with 165 additions and 78 deletions

View File

@ -1,54 +1,58 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible" /> <meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta content="webkit" name="renderer" /> <meta content="webkit" name="renderer"/>
<meta <meta
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover"
name="viewport" name="viewport"
/> />
<meta content="noindex,nofollow" name="robots" /> <meta content="noindex,nofollow" name="robots"/>
<title>Halo</title> <title>Halo</title>
<link href="/favicon.ico" rel="icon" /> <link href="/favicon.ico" rel="icon"/>
<style> <script src="./assets/vue/vue.global.js"></script>
body { <script src="./assets/vue-router/vue-router.global.js"></script>
height: 100%; <script src="./assets/admin-shared/halo-admin-shared.iife.js"></script>
background-color: #f5f5f5; <script src="./assets/components/halo-components.iife.js"></script>
} <style>
body {
height: 100%;
background-color: #f5f5f5;
}
#loader { #loader {
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
margin: auto; margin: auto;
border: solid 3px #e5e5e5; border: solid 3px #e5e5e5;
border-top-color: #333; border-top-color: #333;
border-radius: 50%; border-radius: 50%;
width: 30px; width: 30px;
height: 30px; height: 30px;
animation: spin 0.6s linear infinite; animation: spin 0.6s linear infinite;
} }
@keyframes spin { @keyframes spin {
to { to {
transform: rotate(360deg); transform: rotate(360deg);
}
} }
</style> }
</head> </style>
<body class="themeable-default"> </head>
<noscript> <body class="themeable-default">
<strong> <noscript>
We're sorry but halo admin client doesn't work properly without <strong>
JavaScript enabled. Please enable it to continue. We're sorry but halo admin client doesn't work properly without
</strong> JavaScript enabled. Please enable it to continue.
</noscript> </strong>
<div id="app"> </noscript>
<div id="loader"></div> <div id="app">
</div> <div id="loader"></div>
<script src="/src/main.ts" type="module"></script> </div>
</body> <script src="/src/main.ts" type="module"></script>
</body>
</html> </html>

View File

@ -72,7 +72,9 @@
"typescript": "~4.7.3", "typescript": "~4.7.3",
"vite": "^2.9.12", "vite": "^2.9.12",
"vite-compression-plugin": "^0.0.4", "vite-compression-plugin": "^0.0.4",
"vite-plugin-externals": "^0.5.0",
"vite-plugin-pwa": "^0.12.0", "vite-plugin-pwa": "^0.12.0",
"vite-plugin-static-copy": "^0.5.1",
"vite-plugin-vue-setup-extend": "^0.4.0", "vite-plugin-vue-setup-extend": "^0.4.0",
"vitest": "^0.15.1", "vitest": "^0.15.1",
"vue-tsc": "^0.34.17" "vue-tsc": "^0.34.17"

View File

@ -44,7 +44,9 @@ importers:
typescript: ~4.7.3 typescript: ~4.7.3
vite: ^2.9.12 vite: ^2.9.12
vite-compression-plugin: ^0.0.4 vite-compression-plugin: ^0.0.4
vite-plugin-externals: ^0.5.0
vite-plugin-pwa: ^0.12.0 vite-plugin-pwa: ^0.12.0
vite-plugin-static-copy: ^0.5.1
vite-plugin-vue-setup-extend: ^0.4.0 vite-plugin-vue-setup-extend: ^0.4.0
vitest: ^0.15.1 vitest: ^0.15.1
vue: ^3.2.37 vue: ^3.2.37
@ -100,7 +102,9 @@ importers:
typescript: 4.7.3 typescript: 4.7.3
vite: 2.9.12_sass@1.52.3 vite: 2.9.12_sass@1.52.3
vite-compression-plugin: 0.0.4 vite-compression-plugin: 0.0.4
vite-plugin-externals: 0.5.0_vite@2.9.12
vite-plugin-pwa: 0.12.0_vite@2.9.12 vite-plugin-pwa: 0.12.0_vite@2.9.12
vite-plugin-static-copy: 0.5.1_vite@2.9.12
vite-plugin-vue-setup-extend: 0.4.0_vite@2.9.12 vite-plugin-vue-setup-extend: 0.4.0_vite@2.9.12
vitest: 0.15.1_fiumxgyk2tfafw3c4rsaverrnm vitest: 0.15.1_fiumxgyk2tfafw3c4rsaverrnm
vue-tsc: 0.34.17_typescript@4.7.3 vue-tsc: 0.34.17_typescript@4.7.3
@ -3529,6 +3533,10 @@ packages:
unbox-primitive: 1.0.2 unbox-primitive: 1.0.2
dev: true dev: true
/es-module-lexer/0.4.1:
resolution: {integrity: sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==}
dev: true
/es-to-primitive/1.2.1: /es-to-primitive/1.2.1:
resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@ -4219,6 +4227,15 @@ packages:
universalify: 2.0.0 universalify: 2.0.0
dev: true dev: true
/fs-extra/10.1.0:
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
engines: {node: '>=12'}
dependencies:
graceful-fs: 4.2.9
jsonfile: 6.1.0
universalify: 2.0.0
dev: true
/fs-extra/7.0.1: /fs-extra/7.0.1:
resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
engines: {node: '>=6 <7 || >=8'} engines: {node: '>=6 <7 || >=8'}
@ -6770,6 +6787,18 @@ packages:
- supports-color - supports-color
dev: true dev: true
/vite-plugin-externals/0.5.0_vite@2.9.12:
resolution: {integrity: sha512-y7SPpHGLSk5ELCbK0SBRJrEr2OuPFxCOKIVkrFECukp9w8hZwh3teCHo2U2UmJ8UHKUP7BoOhTw2DFRbq3GJfQ==}
peerDependencies:
vite: ^2.0.0
dependencies:
acorn: 8.7.1
es-module-lexer: 0.4.1
fs-extra: 10.0.1
magic-string: 0.25.9
vite: 2.9.12_sass@1.52.3
dev: true
/vite-plugin-pwa/0.12.0_vite@2.9.12: /vite-plugin-pwa/0.12.0_vite@2.9.12:
resolution: {integrity: sha512-KYD+cnS5ExLF3T28NkfzBLZ53ehHlp+qMhHGFNh0zlVGpFHrJkL2v9wd4AMi7ZkBTffgeNatIFiv8rhCsMSxBQ==} resolution: {integrity: sha512-KYD+cnS5ExLF3T28NkfzBLZ53ehHlp+qMhHGFNh0zlVGpFHrJkL2v9wd4AMi7ZkBTffgeNatIFiv8rhCsMSxBQ==}
peerDependencies: peerDependencies:
@ -6787,6 +6816,19 @@ packages:
- supports-color - supports-color
dev: true dev: true
/vite-plugin-static-copy/0.5.1_vite@2.9.12:
resolution: {integrity: sha512-jRB+TzYUc93lSCRb0xKCJNAjaYb1LwHoLVPsz7cqFN2kDybwLsDpayUzPiNSn1Nb8lX5aoZ5Az/gV9zQu3t8dg==}
engines: {node: '>=12.2'}
peerDependencies:
vite: ^2.6.14
dependencies:
chokidar: 3.5.3
fast-glob: 3.2.11
fs-extra: 10.1.0
picocolors: 1.0.0
vite: 2.9.12_sass@1.52.3
dev: true
/vite-plugin-vue-setup-extend/0.4.0_vite@2.9.12: /vite-plugin-vue-setup-extend/0.4.0_vite@2.9.12:
resolution: {integrity: sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==} resolution: {integrity: sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==}
peerDependencies: peerDependencies:

View File

@ -58,16 +58,18 @@ function loadCoreModules() {
coreModules.forEach(registerModule); coreModules.forEach(registerModule);
} }
function loadPluginModules() { async function loadPluginModules() {
// TODO: load plugin modules // TODO: load plugin modules
} }
initApp(); (async function () {
await initApp();
})();
async function initApp() { async function initApp() {
try { try {
loadCoreModules(); loadCoreModules();
loadPluginModules(); await loadPluginModules();
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }

View File

@ -1,38 +1,75 @@
import { fileURLToPath, URL } from "url"; import { fileURLToPath, URL } from "url";
import { defineConfig } from "vite"; import { defineConfig } from "vite";
import Vue from "@vitejs/plugin-vue"; import Vue from "@vitejs/plugin-vue";
import VueJsx from "@vitejs/plugin-vue-jsx"; import VueJsx from "@vitejs/plugin-vue-jsx";
import VueSetupExtend from "vite-plugin-vue-setup-extend"; import VueSetupExtend from "vite-plugin-vue-setup-extend";
import Compression from "vite-compression-plugin"; import Compression from "vite-compression-plugin";
import { VitePWA } from "vite-plugin-pwa"; import { VitePWA } from "vite-plugin-pwa";
import { viteExternalsPlugin as ViteExternals } from "vite-plugin-externals";
import { viteStaticCopy as ViteStaticCopy } from "vite-plugin-static-copy";
export default defineConfig({ export default ({ mode }: { mode: string }) => {
plugins: [ const isProduction = mode === "production";
Vue(),
VueJsx(), return defineConfig({
VueSetupExtend(), plugins: [
Compression(), Vue(),
VitePWA({ VueJsx(),
manifest: { VueSetupExtend(),
name: "Halo", Compression(),
short_name: "Halo", ViteExternals({
description: "Web Client For Halo", vue: "Vue",
theme_color: "#fff", "vue-router": "VueRouter",
"@halo-dev/shared": "HaloAdminShared",
"@halo-dev/components": "HaloComponents",
}),
ViteStaticCopy({
targets: [
{
src: `./node_modules/vue/dist/vue.global${
isProduction ? ".prod" : ""
}.js`,
dest: "assets/vue",
rename: "vue.global.js",
},
{
src: `./node_modules/vue-router/dist/vue-router.global${
isProduction ? ".prod" : ""
}.js`,
dest: "assets/vue-router",
rename: "vue-router.global.js",
},
{
src: "./node_modules/@halo-dev/admin-shared/dist/halo-admin-shared.iife.js",
dest: "assets/admin-shared",
},
{
src: "./node_modules/@halo-dev/components/dist/halo-components.iife.js",
dest: "assets/components",
},
],
}),
VitePWA({
manifest: {
name: "Halo",
short_name: "Halo",
description: "Web Client For Halo",
theme_color: "#fff",
},
}),
],
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),
}, },
}),
],
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),
}, },
}, build: {
build: { chunkSizeWarningLimit: 2048,
chunkSizeWarningLimit: 2048,
},
test: {
transformMode: {
web: [/\.[jt]sx$/],
}, },
}, test: {
}); transformMode: {
web: [/\.[jt]sx$/],
},
},
});
};