refactor: more comprehensive dev and prod env isolation and build process

This commit is contained in:
pk5ls20
2024-11-16 06:10:36 +08:00
parent e98910c9ff
commit 609e83a824
18 changed files with 62 additions and 3995 deletions

@@ -4,7 +4,7 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="./vite.svg" /> <link rel="icon" type="image/svg+xml" href="./vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + Vue + TS</title> <title>NapCat WebUI</title>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

@@ -5,7 +5,7 @@
"type": "module", "type": "module",
"scripts": { "scripts": {
"webui:lint": "eslint . --fix", "webui:lint": "eslint . --fix",
"webui:dev": "vite --host 127.0.0.1", "webui:dev": "vite",
"webui:build": "vue-tsc -b && vite build", "webui:build": "vue-tsc -b && vite build",
"webui:preview": "vite preview" "webui:preview": "vite preview"
}, },

@@ -3,9 +3,9 @@ import { OneBotConfig } from '../../../src/onebot/config/config';
export class QQLoginManager { export class QQLoginManager {
private retCredential: string; private retCredential: string;
private readonly apiPrefix: string; private readonly apiPrefix: string;
// TODO:
//调试时http://127.0.0.1:6099/api 打包时 ../api //调试时http://127.0.0.1:6099/api 打包时 ../api
constructor(retCredential: string, apiPrefix: string = 'http://127.0.0.1:6099/api') { constructor(retCredential: string, apiPrefix: string = '../api') {
this.retCredential = retCredential; this.retCredential = retCredential;
this.apiPrefix = apiPrefix; this.apiPrefix = apiPrefix;
} }

@@ -11,4 +11,9 @@ export default defineConfig({
'@': path.resolve(__dirname, 'src'), '@': path.resolve(__dirname, 'src'),
}, },
}, },
server: {
proxy: {
'/api': 'http://localhost:6099',
},
},
}); });

@@ -4,9 +4,9 @@
"type": "module", "type": "module",
"version": "4.0.3", "version": "4.0.3",
"scripts": { "scripts": {
"build:framework": "vite build --mode framework", "build:framework": "npm run build:webui && vite build --mode framework",
"build:shell": "vite build --mode shell", "build:shell": "npm run build:webui && vite build --mode shell",
"build:webui": "cd ./src/webui && vite build", "build:webui": "cd napcat.webui && vite build",
"lint": "eslint --fix src/**/*.{js,ts}", "lint": "eslint --fix src/**/*.{js,ts}",
"depend": "cd dist && npm install --omit=dev" "depend": "cd dist && npm install --omit=dev"
}, },
@@ -53,4 +53,4 @@
"qrcode-terminal": "^0.12.0", "qrcode-terminal": "^0.12.0",
"fluent-ffmpeg": "^2.1.2" "fluent-ffmpeg": "^2.1.2"
} }
} }

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@@ -1,14 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="./vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + Vue + TS</title>
<script type="module" crossorigin src="./assets/index-DHJ2fV55.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-C7o8j_TZ.css">
</head>
<body>
<div id="app"></div>
</body>
</html>

Binary file not shown.

Before

(image error) Size: 335 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

Before

(image error) Size: 1.5 KiB

@@ -5,7 +5,7 @@ import nodeResolve from '@rollup/plugin-node-resolve';
import { builtinModules } from 'module'; import { builtinModules } from 'module';
//依赖排除 //依赖排除
const external = ['silk-wasm', 'ws', 'express', 'qrcode-terminal', 'fluent-ffmpeg']; const external = ['silk-wasm', 'ws', 'express', 'qrcode-terminal', 'fluent-ffmpeg'];
const nodeModules = [...builtinModules, builtinModules.map(m => `node:${m}`)].flat(); const nodeModules = [...builtinModules, builtinModules.map((m) => `node:${m}`)].flat();
function genCpModule(module: string) { function genCpModule(module: string) {
return { src: `./node_modules/${module}`, dest: `dist/node_modules/${module}`, flatten: false }; return { src: `./node_modules/${module}`, dest: `dist/node_modules/${module}`, flatten: false };
} }
@@ -23,7 +23,7 @@ const FrameworkBaseConfigPlugin: PluginOption[] = [
{ src: './manifest.json', dest: 'dist' }, { src: './manifest.json', dest: 'dist' },
{ src: './src/core/external/napcat.json', dest: 'dist/config/' }, { src: './src/core/external/napcat.json', dest: 'dist/config/' },
{ src: './src/native/packet', dest: 'dist/moehoo', flatten: false }, { src: './src/native/packet', dest: 'dist/moehoo', flatten: false },
{ src: './static/', dest: 'dist/static/', flatten: false }, { src: './napcat.webui/dist/', dest: 'dist/static/', flatten: false },
{ src: './src/framework/liteloader.cjs', dest: 'dist' }, { src: './src/framework/liteloader.cjs', dest: 'dist' },
{ src: './src/framework/napcat.cjs', dest: 'dist' }, { src: './src/framework/napcat.cjs', dest: 'dist' },
{ src: './src/framework/preload.cjs', dest: 'dist' }, { src: './src/framework/preload.cjs', dest: 'dist' },
@@ -38,65 +38,67 @@ const ShellBaseConfigPlugin: PluginOption[] = [
cp({ cp({
targets: [ targets: [
{ src: './src/native/packet', dest: 'dist/moehoo', flatten: false }, { src: './src/native/packet', dest: 'dist/moehoo', flatten: false },
{ src: './static/', dest: 'dist/static/', flatten: false }, { src: './napcat.webui/dist/', dest: 'dist/static/', flatten: false },
{ src: './src/core/external/napcat.json', dest: 'dist/config/' }, { src: './src/core/external/napcat.json', dest: 'dist/config/' },
{ src: './package.json', dest: 'dist' }, { src: './package.json', dest: 'dist' },
{ src: './launcher/', dest: 'dist', flatten: true }, { src: './launcher/', dest: 'dist', flatten: true },
...(startScripts.map((startScript) => { ...startScripts.map((startScript) => {
return { src: startScript, dest: 'dist' }; return { src: startScript, dest: 'dist' };
})), }),
], ],
}), }),
nodeResolve(), nodeResolve(),
]; ];
const ShellBaseConfig = () => defineConfig({ const ShellBaseConfig = () =>
resolve: { defineConfig({
conditions: ['node', 'default'], resolve: {
alias: { conditions: ['node', 'default'],
'@/core': resolve(__dirname, './src/core'), alias: {
'@': resolve(__dirname, './src'), '@/core': resolve(__dirname, './src/core'),
'./lib-cov/fluent-ffmpeg': './lib/fluent-ffmpeg', '@': resolve(__dirname, './src'),
'./lib-cov/fluent-ffmpeg': './lib/fluent-ffmpeg',
},
}, },
}, build: {
build: { sourcemap: false,
sourcemap: false, target: 'esnext',
target: 'esnext', minify: false,
minify: false, lib: {
lib: { entry: 'src/shell/napcat.ts',
entry: 'src/shell/napcat.ts', formats: ['es'],
formats: ['es'], fileName: () => 'napcat.mjs',
fileName: () => 'napcat.mjs', },
rollupOptions: {
external: [...nodeModules, ...external],
},
}, },
rollupOptions: { });
external: [...nodeModules, ...external],
},
},
});
const FrameworkBaseConfig = () => defineConfig({ const FrameworkBaseConfig = () =>
resolve: { defineConfig({
conditions: ['node', 'default'], resolve: {
alias: { conditions: ['node', 'default'],
'@/core': resolve(__dirname, './src/core'), alias: {
'@': resolve(__dirname, './src'), '@/core': resolve(__dirname, './src/core'),
'./lib-cov/fluent-ffmpeg': './lib/fluent-ffmpeg', '@': resolve(__dirname, './src'),
'./lib-cov/fluent-ffmpeg': './lib/fluent-ffmpeg',
},
}, },
}, build: {
build: { sourcemap: false,
sourcemap: false, target: 'esnext',
target: 'esnext', minify: false,
minify: false, lib: {
lib: { entry: 'src/framework/napcat.ts',
entry: 'src/framework/napcat.ts', formats: ['es'],
formats: ['es'], fileName: () => 'napcat.mjs',
fileName: () => 'napcat.mjs', },
rollupOptions: {
external: [...nodeModules, ...external],
},
}, },
rollupOptions: { });
external: [...nodeModules, ...external],
},
},
});
export default defineConfig(({ mode }): UserConfig => { export default defineConfig(({ mode }): UserConfig => {
if (mode === 'shell') { if (mode === 'shell') {