146 lines
5.8 KiB
TypeScript
146 lines
5.8 KiB
TypeScript
|
import { defineConfig,loadEnv } from 'vite';
|
|||
|
import path, { join } from 'path';
|
|||
|
import { createHtmlPlugin } from 'vite-plugin-html';
|
|||
|
import config from "./src/utils/v1/config";
|
|||
|
import setupPlugins from "./vite/plugins";
|
|||
|
import externalGlobals from "rollup-plugin-external-globals";
|
|||
|
|
|||
|
let version = config.ItemVersion
|
|||
|
console.log(config.ItemVersion);
|
|||
|
|
|||
|
let globals = externalGlobals({
|
|||
|
vue: 'Vue',
|
|||
|
"element-plus": "ElementPlus",
|
|||
|
'vue-router': 'VueRouter',
|
|||
|
axios: 'axios',
|
|||
|
'vue-i18n': 'VueI18n',
|
|||
|
pinia: 'Pinia',
|
|||
|
"vue-demi": "VueDemi",
|
|||
|
nprogress: 'NProgress',
|
|||
|
jquery: "jQuery",
|
|||
|
moment: 'moment',
|
|||
|
lodash: 'lodash',
|
|||
|
echarts: 'echarts',
|
|||
|
// 'md-editor-v3': 'MdEditor',
|
|||
|
screenfull: 'screenfull'
|
|||
|
});
|
|||
|
|
|||
|
const cdn = {
|
|||
|
cssCdn: [
|
|||
|
'https://cdn.bootcdn.net/ajax/libs/element-plus/2.3.3/index.min.css',
|
|||
|
'https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-y/nprogress/0.2.0/nprogress.min.css',
|
|||
|
// 'https://cdn.jsdelivr.net/npm/md-editor-v3@2.11.0/lib/style.css',
|
|||
|
],
|
|||
|
jsCdn: [
|
|||
|
'https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-y/vue/3.2.31/vue.global.prod.min.js',
|
|||
|
'https://cdn.bootcdn.net/ajax/libs/vue-demi/0.13.11/index.iife.min.js',
|
|||
|
'https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-y/screenfull.js/5.2.0/screenfull.min.js',
|
|||
|
'https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-y/pinia/2.0.11/pinia.iife.min.js',
|
|||
|
'https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-y/jquery/3.6.0/jquery.min.js',
|
|||
|
'https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-y/axios/0.26.0/axios.min.js',
|
|||
|
'https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-y/moment.js/2.29.1/moment.min.js',
|
|||
|
'https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-y/lodash.js/4.17.21/lodash.min.js',
|
|||
|
'https://cdn.bootcdn.net/ajax/libs/element-plus/2.3.3/index.full.min.js',
|
|||
|
'https://cdn.bootcdn.net/ajax/libs/vue-i18n/9.2.2/vue-i18n.global.min.js',
|
|||
|
'https://cdn.bootcdn.net/ajax/libs/vue-router/4.1.5/vue-router.global.prod.min.js',
|
|||
|
// 'https://cdn.jsdelivr.net/npm/md-editor-v3@2.11.0/lib/md-editor-v3.umd.js',
|
|||
|
'https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-y/nprogress/0.2.0/nprogress.min.js',
|
|||
|
'https://lib.baomitu.com/echarts/5.4.3/echarts.js'
|
|||
|
]
|
|||
|
}
|
|||
|
|
|||
|
const getEnvFn = (mode, target) => {
|
|||
|
return loadEnv(mode, process.cwd())[target]
|
|||
|
}
|
|||
|
import px2rem from 'postcss-px2rem'
|
|||
|
const postcss = px2rem({
|
|||
|
remUnit: 16, //基准大小 baseSize,需要和rem.js中相同
|
|||
|
});
|
|||
|
|
|||
|
// https://vitejs.dev/config/
|
|||
|
export default defineConfig(({ command, mode }) => {
|
|||
|
const isBuild = command == 'build'
|
|||
|
const VITE_HTTP: string = getEnvFn(mode,"VITE_HTTP"); // 获取url
|
|||
|
|
|||
|
return {
|
|||
|
publicPath:"/",
|
|||
|
plugins: [...setupPlugins(isBuild),
|
|||
|
createHtmlPlugin({
|
|||
|
inject: {
|
|||
|
data: {
|
|||
|
title: getEnvFn(mode,"VITE_TITLE"),
|
|||
|
// 注入cdn
|
|||
|
cssCdn: getEnvFn(mode,"VITE_NODE_ENV") === 'dev' ? cdn.cssCdn : cdn.cssCdn,
|
|||
|
jsCdn: getEnvFn(mode,"VITE_NODE_ENV") === 'dev' ? [] : cdn.jsCdn
|
|||
|
},
|
|||
|
},
|
|||
|
})
|
|||
|
],
|
|||
|
css:{
|
|||
|
loaderOptions: {
|
|||
|
postcss: {
|
|||
|
plugins: [postcss],
|
|||
|
},
|
|||
|
},
|
|||
|
},
|
|||
|
//设置别名
|
|||
|
resolve: {
|
|||
|
alias: {
|
|||
|
"@/assets": join(__dirname, './src/assets/'+version+"/"),
|
|||
|
"@/components": join(__dirname, './src/components/'+version+"/"),
|
|||
|
"@/commonNetwork": join(__dirname, './src/network/'),
|
|||
|
"@/network": join(__dirname, './src/network/'+version+"/"),
|
|||
|
"@/router": join(__dirname, './src/router/'+version+"/"),
|
|||
|
"@/store": join(__dirname, './src/store/'+version+"/"),
|
|||
|
"@/plugins": join(__dirname, './src/plugins/'+version+"/"),
|
|||
|
"@/utils": join(__dirname, './src/utils/'+version+"/"),
|
|||
|
"@/views": join(__dirname, './src/views/'+version+"/"),
|
|||
|
"@/interface": join(__dirname, './src/interface/'+version+"/"),
|
|||
|
'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
|
|||
|
},
|
|||
|
extensions: [".vue",'.js', '.json', '.ts', '.tsx'],//使用别名省略的后缀名
|
|||
|
},
|
|||
|
build: {//去除console log.
|
|||
|
terserOptions: {
|
|||
|
compress: {
|
|||
|
drop_console: true,
|
|||
|
drop_debugger: true,
|
|||
|
},
|
|||
|
},
|
|||
|
rollupOptions: {
|
|||
|
// 忽略打包
|
|||
|
external: ['vue-i18n','vue-router','NProgress','element-plus','axios','jquery','moment','echarts','lodash','screenfull','vue', 'Pinia','vue-demi'],
|
|||
|
plugins:[
|
|||
|
globals
|
|||
|
],
|
|||
|
// reportCompressedSize: false,
|
|||
|
// sourcemap: false,
|
|||
|
output: { //静态资源分类打包
|
|||
|
chunkFileNames: 'static/js/[name]-[hash].js',
|
|||
|
entryFileNames: 'static/js/[name]-[hash].js',
|
|||
|
assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
|
|||
|
manualChunks(id) { //静态资源分拆打包
|
|||
|
if (id.includes('node_modules')) {
|
|||
|
return id.toString().split('node_modules/')[1].split('/')[0].toString();
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
minify: 'esbuild' // 混淆器,terser构建后文件体积更小
|
|||
|
}
|
|||
|
},
|
|||
|
server: {//代理
|
|||
|
host: "0.0.0.0",
|
|||
|
port:8081,
|
|||
|
hmr: true,
|
|||
|
proxy: {
|
|||
|
"/dev-api/": {
|
|||
|
target: VITE_HTTP,
|
|||
|
changeOrigin: true,
|
|||
|
rewrite: (path) => path.replace(/^\/dev-api/, ""),
|
|||
|
},
|
|||
|
},
|
|||
|
},
|
|||
|
}
|
|||
|
|
|||
|
})
|