java-mall-admin/vue.config.js
2024-11-01 16:24:11 +08:00

236 lines
6.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @description vue.config.js全局配置
*/
const path = require('path')
const {
/* baseURL, */
publicPath,
assetsDir,
outputDir,
lintOnSave,
transpileDependencies,
title,
abbreviation,
devPort,
providePlugin,
build7z,
buildGzip,
imageCompression,
URL,
} = require('./src/config')
const rely = require('./vab.config')
const { webpackBarName, webpackBanner } = require('./vab.config')
const { version, author } = require('./package.json')
const Webpack = require('webpack')
const WebpackBar = require('webpackbar')
const { WebpackChain } = require('webpack-ld')
const FileManagerPlugin = require('filemanager-webpack-plugin')
const dayjs = require('dayjs')
const dateTime = dayjs().format('YYYY-M-D HH:mm:ss')
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const productionGzipExtensions = ['html', 'js', 'css', 'svg']
process.env.VUE_APP_TITLE = title
process.env.VUE_APP_AUTHOR = author
process.env.VUE_APP_RANDOM = `${dayjs()}-${process.env.VUE_GITHUB_USER_NAME}`
process.env.VUE_APP_UPDATE_TIME = dateTime
process.env.VUE_APP_VERSION = version
process.env.VUE_APP_RELY = rely
process.env.VUE_APP_URL_BASE_URL = URL.base_url
process.env.VUE_APP_URL_IM_CONFIG = URL.account.user.base.im_config
process.env.VUE_APP_URL_KEFU_CONFIG = URL.account.user.base.kefu_config
process.env.VUE_APP_URL_FRIEND_INFO_LISTS = URL.account.user.base.friend_info_lists
process.env.VUE_APP_URL_ZONEMSG_LISTS = URL.account.user.base.zonemsg_lists
process.env.VUE_APP_URL_MSG_CHAT_LISTS = URL.account.user.base.msg_chat_lists
const resolve = (dir) => {
return path.join(__dirname, dir)
}
module.exports = {
publicPath,
assetsDir,
outputDir,
lintOnSave,
transpileDependencies,
devServer: {
hot: true,
port: devPort,
open: true,
noInfo: false,
overlay: {
warnings: true,
errors: true,
},
// 注释掉的地方是前端配置代理访问后端的示例
// baseURL必须为/xxx而不是后端服务器请先了解代理逻辑再设置前端代理
// !!!一定要注意!!!
// 1.这里配置了跨域及代理只针对开发环境生效
// 2.不建议你在前端配置跨域建议你后端配置Allow-Origin,Method,Headers放行token字段一步到位
// 3.后端配置了跨域就不需要前端再配置会发生Origin冲突
// proxy: {
// [baseURL]: {
// target: `http://你的后端接口地址`,
// ws: true,
// changeOrigin: true,
// pathRewrite: {
// ['^' + baseURL]: '',
// },
// },
// },
after: require('./mock'),
},
pwa: {
workboxOptions: {
skipWaiting: true,
clientsClaim: true,
},
themeColor: '#ffffff',
msTileColor: '#ffffff',
appleMobileWebAppCapable: 'yes',
appleMobileWebAppStatusBarStyle: 'black',
manifestOptions: {
name: 'Lancer e-Commerce Systems',
short_name: 'LancerMall',
background_color: '#ffffff',
},
},
configureWebpack() {
return {
resolve: {
alias: {
'~': resolve('.'),
'@': resolve('src'),
},
},
plugins: [
WebpackChain(providePlugin),
new WebpackBar({
name: webpackBarName,
}),
],
}
},
chainWebpack(config) {
config.resolve.symlinks(true)
config.module.rule('svg').exclude.add(resolve('src/icon'))
config.module
.rule('vabIcon')
.test(/\.svg$/)
.include.add(resolve('src/icon'))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({ symbolId: 'vab-icon-[name]' })
config.when(process.env.NODE_ENV === 'development', (config) => {
config.devtool('source-map')
})
config.when(process.env.NODE_ENV === 'production', (config) => {
config.performance.set('hints', false)
config.devtool('none')
config.optimization.splitChunks({
automaticNameDelimiter: '-',
chunks: 'all',
cacheGroups: {
chunk: {
name: 'vab-chunk',
test: /[\\/]node_modules[\\/]/,
minSize: 131072,
maxSize: 524288,
chunks: 'async',
minChunks: 2,
priority: 10,
},
vue: {
name: 'vue',
test: /[\\/]node_modules[\\/](vue(.*)|core-js)[\\/]/,
chunks: 'initial',
priority: 20,
},
elementUI: {
name: 'element-ui',
test: /[\\/]node_modules[\\/]element-ui(.*)[\\/]/,
priority: 30,
},
extra: {
name: 'vab-extra',
test: resolve('src/extra'),
priority: 40,
},
// 根据使用模块抽取公共代码
// echarts: {
// name: 'echarts',
// test: /[\\/]node_modules[\\/](echarts|zrender|tslib)[\\/]/,
// priority: 50,
// },
},
})
config
.plugin('banner')
.use(Webpack.BannerPlugin, [`${webpackBanner}${dateTime}`])
if (imageCompression)
config.module
.rule('images')
.use('image-webpack-loader')
.loader('image-webpack-loader')
.options({
bypassOnDebug: true,
})
.end()
if (buildGzip)
config.plugin('compression').use(CompressionWebpackPlugin, [
{
filename: '[path][base].gz[query]',
algorithm: 'gzip',
test: new RegExp(
'\\.(' + productionGzipExtensions.join('|') + ')$'
),
threshold: 8192,
minRatio: 0.8,
},
])
if (build7z)
config.plugin('fileManager').use(FileManagerPlugin, [
{
events: {
onEnd: {
archive: [
{
source: `./${outputDir}`,
destination: `./${outputDir}/${abbreviation}_${dayjs().unix()}.zip`,
},
],
},
},
},
])
})
},
runtimeCompiler: true,
productionSourceMap: false,
css: {
requireModuleExtension: true,
sourceMap: true,
loaderOptions: {
sass: {
sassOptions: { outputStyle: 'expanded' },
additionalData(content, loaderContext) {
const { resourcePath, rootContext } = loaderContext
const relativePath = path.relative(rootContext, resourcePath)
if (
relativePath.replace(/\\/g, '/') !==
'src/vab/styles/variables/variables.scss'
)
return (
'@use "sass:math";@import "~@/vab/styles/variables/variables.scss";' +
content
)
return content
},
},
},
},
}