123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import legacyPlugin from '@vitejs/plugin-legacy'
- import { viteLogo } from './src/core/config'
- import Banner from 'vite-plugin-banner'
- import * as path from 'path'
- import * as dotenv from 'dotenv'
- import * as fs from 'fs'
- import vuePlugin from '@vitejs/plugin-vue'
- import vueDevTools from 'vite-plugin-vue-devtools'
- import VueFilePathPlugin from './vitePlugin/componentName/index.js'
- import { svgBuilder } from 'vite-auto-import-svg'
- import { AddSecret } from './vitePlugin/secret'
- // @see https://cn.vitejs.dev/config/
- export default ({ mode }) => {
- AddSecret('')
- const NODE_ENV = mode || 'development'
- const envFiles = [`.env.${NODE_ENV}`]
- for (const file of envFiles) {
- const envConfig = dotenv.parse(fs.readFileSync(file))
- for (const k in envConfig) {
- process.env[k] = envConfig[k]
- }
- }
- viteLogo(process.env)
- const timestamp = Date.parse(new Date())
- const optimizeDeps = {}
- const alias = {
- '@': path.resolve(__dirname, './src'),
- vue$: 'vue/dist/vue.runtime.esm-bundler.js'
- }
- const esbuild = {}
- const rollupOptions = {
- output: {
- entryFileNames: 'assets/087AC4D233B64EB0[name].[hash].js',
- chunkFileNames: 'assets/087AC4D233B64EB0[name].[hash].js',
- assetFileNames: 'assets/087AC4D233B64EB0[name].[hash].[ext]'
- }
- }
- const config = {
- base: '/', // 编译后js导入的资源路径
- root: './', // index.html文件所在位置
- publicDir: 'public', // 静态资源文件夹
- resolve: {
- alias
- },
- define: {
- 'process.env': {}
- },
- css: {
- preprocessorOptions: {
- scss: {
- api: 'modern-compiler' // or "modern"
- }
- }
- },
- server: {
- // 如果使用docker-compose开发模式,设置为false
- open: true,
- port: process.env.VITE_CLI_PORT,
- proxy: {
- // 把key的路径代理到target位置
- // detail: https://cli.vuejs.org/config/#devserver-proxy
- [process.env.VITE_BASE_API]: {
- // 需要代理的路径 例如 '/api'
- target: `${process.env.VITE_BASE_PATH}:${process.env.VITE_SERVER_PORT}/`, // 代理到 目标路径
- changeOrigin: true,
- rewrite: (path) =>
- path.replace(new RegExp('^' + process.env.VITE_BASE_API), '')
- }
- }
- },
- build: {
- minify: 'terser', // 是否进行压缩,boolean | 'terser' | 'esbuild',默认使用terser
- manifest: false, // 是否产出manifest.json
- sourcemap: false, // 是否产出sourcemap.json
- outDir: 'dist', // 产出目录
- terserOptions: {
- compress: {
- //生产环境时移除console
- drop_console: true,
- drop_debugger: true
- }
- },
- rollupOptions
- },
- esbuild,
- optimizeDeps,
- plugins: [
- process.env.VITE_POSITION === 'open' &&
- vueDevTools({ launchEditor: process.env.VITE_EDITOR }),
- legacyPlugin({
- targets: [
- 'Android > 39',
- 'Chrome >= 60',
- 'Safari >= 10.1',
- 'iOS >= 10.3',
- 'Firefox >= 54',
- 'Edge >= 15'
- ]
- }),
- vuePlugin(),
- svgBuilder('./src/assets/icons/'),
- svgBuilder('./src/plugin/'),
- [Banner(`\n Build based on gin-vue-admin \n Time : ${timestamp}`)],
- VueFilePathPlugin('./src/pathInfo.json')
- ]
- }
- return config
- }
|