build:优化代码结构和安全性 #4

Merged
minglipro merged 1 commits from dev into master 2025-08-20 19:04:11 +08:00
8 changed files with 28 additions and 43 deletions
Showing only changes of commit 05822f2fd2 - Show all commits

2
.gitignore vendored
View File

@ -30,3 +30,5 @@ coverage
*.tsbuildinfo *.tsbuildinfo
*lock* *lock*
*auto.import*

View File

@ -1,6 +0,0 @@
{
"recommendations": [
"Vue.volar",
"esbenp.prettier-vscode"
]
}

View File

@ -14,6 +14,7 @@
"p": "vite preview", "p": "vite preview",
"build-only": "vite build", "build-only": "vite build",
"b": "vite build", "b": "vite build",
"bp": "yarn b && yarn p",
"type-check": "vue-tsc --build", "type-check": "vue-tsc --build",
"format": "prettier --write src/" "format": "prettier --write src/"
}, },
@ -26,12 +27,14 @@
"alova": "^3.3.4", "alova": "^3.3.4",
"ant-design-vue": "^4.2.6", "ant-design-vue": "^4.2.6",
"base64-arraybuffer": "^1.0.2", "base64-arraybuffer": "^1.0.2",
"javascript-obfuscator": "^4.1.1",
"js-md5": "^0.8.3", "js-md5": "^0.8.3",
"marked": "^16.1.2", "marked": "^16.1.2",
"naive-ui": "^2.42.0", "naive-ui": "^2.42.0",
"pinia": "^3.0.3", "pinia": "^3.0.3",
"pinia-plugin-persistedstate": "^4.5.0", "pinia-plugin-persistedstate": "^4.5.0",
"sass-embedded": "^1.90.0", "sass-embedded": "^1.90.0",
"vite-plugin-bundle-obfuscator": "^1.8.0",
"vue": "^3.5.18", "vue": "^3.5.18",
"vue-router": "^4.5.1" "vue-router": "^4.5.1"
}, },
@ -47,6 +50,8 @@
"unplugin-auto-import": "^20.0.0", "unplugin-auto-import": "^20.0.0",
"unplugin-vue-components": "^29.0.0", "unplugin-vue-components": "^29.0.0",
"vite": "^7.0.6", "vite": "^7.0.6",
"vite-plugin-chunk-split": "^0.5.0",
"vite-plugin-obfuscator": "^1.0.5",
"vite-plugin-vue-devtools": "^8.0.0", "vite-plugin-vue-devtools": "^8.0.0",
"vue-tsc": "^3.0.4" "vue-tsc": "^3.0.4"
} }

View File

@ -62,7 +62,6 @@
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, ref } from 'vue';
import { getMyCar } from '@/apis/bacth'; import { getMyCar } from '@/apis/bacth';
import { UserStore } from '@/plugins'; import { UserStore } from '@/plugins';

View File

@ -49,7 +49,6 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { type FormInst, type FormItemRule } from 'naive-ui'; import { type FormInst, type FormItemRule } from 'naive-ui';
import { onMounted, reactive, ref } from 'vue';
import message from '@/utils/message.ts'; import message from '@/utils/message.ts';
import { captcha, login } from '@/apis/auth'; import { captcha, login } from '@/apis/auth';
import { UserStore } from '@/plugins'; import { UserStore } from '@/plugins';

View File

@ -52,7 +52,6 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { type FormInst, type FormItemRule } from 'naive-ui'; import { type FormInst, type FormItemRule } from 'naive-ui';
import { onMounted, reactive, ref } from 'vue';
import message from '@/utils/message.ts'; import message from '@/utils/message.ts';
import { captcha, register } from '@/apis/auth'; import { captcha, register } from '@/apis/auth';
import { UserStore } from '@/plugins'; import { UserStore } from '@/plugins';

View File

@ -1,24 +0,0 @@
/* eslint-disable */
// @ts-nocheck
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
// biome-ignore lint: disable
export {}
/* prettier-ignore */
declare module 'vue' {
export interface GlobalComponents {
NAlert: typeof import('naive-ui')['NAlert']
NButton: typeof import('naive-ui')['NButton']
NCheckbox: typeof import('naive-ui')['NCheckbox']
NDescriptions: typeof import('naive-ui')['NDescriptions']
NDescriptionsItem: typeof import('naive-ui')['NDescriptionsItem']
NForm: typeof import('naive-ui')['NForm']
NFormItem: typeof import('naive-ui')['NFormItem']
NGradientText: typeof import('naive-ui')['NGradientText']
NInput: typeof import('naive-ui')['NInput']
NText: typeof import('naive-ui')['NText']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
}
}

View File

@ -2,8 +2,11 @@ import { fileURLToPath, URL } from 'node:url';
import { defineConfig } from 'vite'; import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue'; import vue from '@vitejs/plugin-vue';
import AutoImport from 'unplugin-auto-import/vite';
import { chunkSplitPlugin } from 'vite-plugin-chunk-split';
import vueDevTools from 'vite-plugin-vue-devtools'; import vueDevTools from 'vite-plugin-vue-devtools';
import Components from 'unplugin-vue-components/vite'; import Components from 'unplugin-vue-components/vite';
import vitePluginBundleObfuscator from 'vite-plugin-bundle-obfuscator';
import { import {
AntDesignVueResolver, AntDesignVueResolver,
IduxResolver, IduxResolver,
@ -21,21 +24,29 @@ export default defineConfig({
build: { build: {
rollupOptions: { rollupOptions: {
output: { output: {
chunkFileNames: `[hash].js`, chunkFileNames: `assets/[name]/[hash].js`,
entryFileNames: `[hash].js`, entryFileNames: `assets/[name]/[hash].js`,
assetFileNames: `[hash].[ext]`, assetFileNames: `assets/[name]/[hash].[ext]`,
},
},
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
}, },
}, },
}, },
plugins: [ plugins: [
vue(), vue(),
vueDevTools(), vueDevTools(),
chunkSplitPlugin({
strategy: 'single-vendor',
}),
AutoImport({
imports: ['vue', 'vue-router', 'pinia', '@vueuse/core'],
dts: 'src/types/ts.auto.import.d.ts',
}),
vitePluginBundleObfuscator({
excludes: [],
enable: true,
log: true,
autoExcludeNodeModules: true,
threadPool: true,
}),
Components({ Components({
resolvers: [ resolvers: [
IduxResolver({ IduxResolver({
@ -47,7 +58,7 @@ export default defineConfig({
importStyle: 'less', importStyle: 'less',
}), }),
], ],
dts: 'src/types/components.auto.d.ts', dts: 'src/types/components.auto.import.d.ts',
}), }),
], ],
resolve: { resolve: {