mirror of https://github.com/allinssl/allinssl
234 lines
7.2 KiB
TypeScript
234 lines
7.2 KiB
TypeScript
import { defineConfig } from 'vite'
|
||
import path, { resolve } from 'path' // 路径处理
|
||
import Vue from '@vitejs/plugin-vue' // vue处理
|
||
import VueJsx from '@vitejs/plugin-vue-jsx' // jsx处理
|
||
// import basicSsl from '@vitejs/plugin-basic-ssl' // https协议兼容
|
||
import legacy from '@vitejs/plugin-legacy' // 浏览器兼容
|
||
import VueDevTools from 'vite-plugin-vue-devtools' // vue3调试工具
|
||
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
|
||
import { VueMcp } from 'vite-plugin-vue-mcp' // vite mcp 引入,解决数据构建文件
|
||
import AutoImport from 'unplugin-auto-import/vite' // 方法自动引入
|
||
import { NaiveUiResolver } from 'unplugin-vue-components/resolvers' // 引入naive-ui组件
|
||
import Components from 'unplugin-vue-components/vite' // 组件自动引入
|
||
// import { compression } from 'vite-plugin-compression2'
|
||
import { ftpSync } from '@baota/vite-plugin-ftp-sync' // ftp同步
|
||
import pluginI18n from '@baota/vite-plugin-i18n' // i18n生成器
|
||
import pluginProjectSyncGit from '@baota/vite-plugin-turborepo-deploy' // 项目同步git
|
||
// import
|
||
|
||
const packPath = 'static/' // 打包后的vite目录
|
||
const isDev = process.env.NODE_ENV === 'development' // 开发环境
|
||
|
||
/// <reference types="vitest" />
|
||
export default defineConfig({
|
||
mode: isDev ? 'development' : 'production',
|
||
base: './',
|
||
// 插件配置
|
||
plugins: [
|
||
// vue处理
|
||
Vue({
|
||
script: {
|
||
defineModel: true,
|
||
},
|
||
}),
|
||
|
||
// jsx处理
|
||
VueJsx(),
|
||
// 压缩gzip
|
||
// compression(),
|
||
// 方法自动引入
|
||
AutoImport({
|
||
imports: ['vue', '@vueuse/core', 'pinia', 'vue-router'],
|
||
dts: './types/auto-imports.d.ts', // 生成的d.ts文件
|
||
eslintrc: {
|
||
enabled: true, // 默认false, true启用。生成一次就可以,避免每次工程启动都生成
|
||
filepath: './types/.eslintrc-auto-import.json', // 生成json文件
|
||
globalsPropValue: true,
|
||
},
|
||
}),
|
||
|
||
// 组件自动引入
|
||
Components({
|
||
dts: './types/components.d.ts', // 生成的d.ts文件
|
||
dirs: ['src/components'], // 指定扫描的文件夹
|
||
extensions: ['vue', 'tsx'], // 指定扫描的文件类型
|
||
directoryAsNamespace: false, // 是否将目录作为命名空间
|
||
resolvers: [NaiveUiResolver()],
|
||
}),
|
||
|
||
// https协议兼容
|
||
// basicSsl(),
|
||
|
||
// 浏览器兼容
|
||
isDev &&
|
||
legacy({
|
||
targets: ['>0.1%', 'Firefox > 55', 'Chrome > 60', 'safari > 11'],
|
||
}),
|
||
|
||
// vue3调试工具
|
||
VueDevTools(),
|
||
|
||
// 创建 svg 图标
|
||
createSvgIconsPlugin({
|
||
iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/svg/')],
|
||
symbolId: 'icon-[dir]-[name]',
|
||
}),
|
||
// vite mcp 引入,解决数据构建文件
|
||
VueMcp(),
|
||
// i18n生成器
|
||
pluginI18n(),
|
||
// ftp同步
|
||
ftpSync([
|
||
// {
|
||
// host: '192.168.168.121',
|
||
// port: 22,
|
||
// username: 'root',
|
||
// password: 'www.bt.cn',
|
||
// remotePath: '/www/allinssl/frontend',
|
||
// clearRemote: true,
|
||
// },
|
||
// {
|
||
// host: '192.168.69.167',
|
||
// port: 22,
|
||
// username: 'root',
|
||
// password: 'www.bt.cn',
|
||
// remotePath: '/www/allinssl/frontend',
|
||
// clearRemote: true,
|
||
// },
|
||
]),
|
||
// 项目同步git
|
||
pluginProjectSyncGit({
|
||
gitProjects: [
|
||
// {
|
||
// repo: 'ssh://git@git.bt.cn:30001/wzz/allinssl.git',
|
||
// branch: '1.0.2',
|
||
// targetDir: 'allinssl-gitlab',
|
||
// discardChanges: true,
|
||
// },
|
||
{
|
||
repo: 'https://github.com/allinssl/allinssl.git',
|
||
branch: '1.0.5',
|
||
targetDir: 'allinssl-github',
|
||
discardChanges: true,
|
||
},
|
||
],
|
||
localSync: [
|
||
{
|
||
source: 'apps/allin-ssl/dist',
|
||
target: ['.sync-git/allinssl-gitlab/build', '.sync-git/allinssl-github/build'],
|
||
mode: 'copy',
|
||
clearTarget: true,
|
||
exclude: ['node_modules', '.git'],
|
||
},
|
||
{
|
||
source: '/',
|
||
target: ['.sync-git/allinssl-gitlab/frontend', '.sync-git/allinssl-github/frontend'],
|
||
mode: 'copy',
|
||
clearTarget: true,
|
||
excludeDirs: [
|
||
'node_modules',
|
||
'dist',
|
||
'.sync-git',
|
||
'.sync-log',
|
||
'.cursor',
|
||
'.devcontainer',
|
||
'.github',
|
||
'.git',
|
||
'.test',
|
||
'.vascode',
|
||
'.turbo',
|
||
'apps/cloud-control',
|
||
'apps/monorepo-docs',
|
||
'apps/naive-template',
|
||
'apps/vueFlow',
|
||
],
|
||
},
|
||
],
|
||
}),
|
||
],
|
||
resolve: {
|
||
// 别名配置
|
||
alias: {
|
||
'@layout': path.resolve(__dirname, 'src/views/layout'),
|
||
'@login': path.resolve(__dirname, 'src/views/login'),
|
||
'@404': path.resolve(__dirname, 'src/views/404'),
|
||
'@certManage': path.resolve(__dirname, 'src/views/certManage'),
|
||
'@certApply': path.resolve(__dirname, 'src/views/certApply'),
|
||
'@autoDeploy': path.resolve(__dirname, 'src/views/autoDeploy'),
|
||
'@workflowView': path.resolve(__dirname, 'src/views/autoDeploy/children/workflowView'),
|
||
'@autoApiManage': path.resolve(__dirname, 'src/views/autoApiManage'),
|
||
'@home': path.resolve(__dirname, 'src/views/home'),
|
||
'@monitor': path.resolve(__dirname, 'src/views/monitor'),
|
||
'@settings': path.resolve(__dirname, 'src/views/settings'),
|
||
'@test': path.resolve(__dirname, 'src/views/test'),
|
||
'@api': path.resolve(__dirname, 'src/api'),
|
||
'@assets': path.resolve(__dirname, 'src/assets'),
|
||
'@components': path.resolve(__dirname, 'src/components'),
|
||
'@public': path.resolve(__dirname, 'src/public'),
|
||
'@router': path.resolve(__dirname, 'src/router'),
|
||
'@locales': path.resolve(__dirname, 'src/locales'),
|
||
'@config': path.resolve(__dirname, 'src/config'),
|
||
'@styles': path.resolve(__dirname, 'src/styles'),
|
||
'@types': path.resolve(__dirname, 'src/types'),
|
||
'@lib': path.resolve(__dirname, 'src/lib'),
|
||
'@': path.resolve(__dirname, 'src'),
|
||
},
|
||
},
|
||
build: {
|
||
minify: 'terser', // 混淆器,terser构建后文件体积更小
|
||
// assetsDir: `${packPath}/`, // 静态资源目录
|
||
sourcemap: false,
|
||
cssCodeSplit: false, // 不分割css代码
|
||
reportCompressedSize: false, // 不统计gzip压缩后的文件大小
|
||
chunkSizeWarningLimit: 800, // 警告阈值
|
||
assetsInlineLimit: 2048, // 小于2kb的资源内联
|
||
modulePreload: false, // 禁用预加载
|
||
terserOptions: {
|
||
// 打包后移除console和注释
|
||
compress: {
|
||
drop_console: !isDev, // 生产环境移除console
|
||
drop_debugger: !isDev, // 生产环境移除debugger
|
||
},
|
||
},
|
||
rollupOptions: {
|
||
input: {
|
||
main: resolve(__dirname, 'index.html'), // 主页面
|
||
},
|
||
strictDeprecations: true, // 严格弃用
|
||
output: {
|
||
entryFileNames: `${packPath}js/[name]-[hash].js`,
|
||
chunkFileNames: `${packPath}js/[name]-[hash].js`,
|
||
assetFileNames: (chunkInfo) => {
|
||
const { names } = chunkInfo
|
||
let ext = '[ext]'
|
||
if (names && names.length > 0) {
|
||
const name = names[0]
|
||
const str = name.substring(name.lastIndexOf('.') + 1)
|
||
if (str === 'ttf' || str === 'woff' || str === 'woff2') ext = 'font'
|
||
}
|
||
return `${packPath}${ext}/[name]-[hash].[ext]`
|
||
},
|
||
},
|
||
},
|
||
},
|
||
server: {
|
||
// https: { rejectUnauthorized: false },
|
||
host: '0.0.0.0',
|
||
port: 5173,
|
||
proxy: {
|
||
'/api': {
|
||
// target: `http://${'192.168.168.25'}:${37628}`,
|
||
// target: `http://${'192.168.168.121'}:${33488}`,
|
||
target: `http://${'192.168.69.167'}:${40255}`,
|
||
changeOrigin: true, // 是否改变源
|
||
rewrite: (path: string) => path.replace(/^\/api/, ''), // 重写路径
|
||
secure: false, // 如果是https接口,需要配置这个参数
|
||
ws: false, // 是否启用websocket
|
||
},
|
||
},
|
||
},
|
||
test: {
|
||
include: ['src/**/*.spec.ts'],
|
||
},
|
||
})
|