guoyu/Study-Vue-redis/ry-study-ui/vue.config.js
2025-12-03 18:58:36 +08:00

171 lines
5.9 KiB
JavaScript
Raw 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.

'use strict'
const path = require('path')
function resolve(dir) {
return path.join(__dirname, dir)
}
const CompressionPlugin = require('compression-webpack-plugin')
// 网页标题确保使用UTF-8编码
let name = process.env.VUE_APP_TITLE || '国语教育平台'
// 移除可能的引号和空白字符
if (typeof name === 'string') {
name = name.trim().replace(/^['"]|['"]$/g, '')
// 如果为空,使用默认值
if (!name || name.length === 0) {
name = '国语教育平台'
}
} else {
name = '国语教育平台'
}
// 后端接口地址,优先使用环境变量,否则根据环境使用默认值
// 生产环境使用生产服务器地址,开发环境使用本地地址
const baseUrl = process.env.VUE_APP_BASE_URL ||
(process.env.NODE_ENV === 'production' ? '/api' : 'http://localhost:30091')
const port = process.env.port || process.env.npm_config_port || 20002 // 端口(管理界面)
// vue.config.js 配置说明
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
// 这里只列一部分,具体配置参考文档
module.exports = {
// 部署生产环境和开发环境下的URL。
// 默认情况下Vue CLI 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.ddnai.com/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ddnai.com/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
// 在npm run build 或 yarn build 时 生成文件的目录名称要和baseUrl的生产环境路径一致默认dist
outputDir: 'dist',
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
assetsDir: 'static',
// 如果你不需要生产环境的 source map可以将其设置为 false 以加速生产环境构建。
productionSourceMap: false,
transpileDependencies: ['quill'],
// webpack-dev-server 相关配置
devServer: {
host: '0.0.0.0',
port: port,
open: true,
// 配置 WebSocket 和热重载
// 注意Vue CLI 4.x 使用 sockjs-node 进行热重载
// 如果 SockJS 连接失败不影响功能,可以忽略这些错误
// 如果需要禁用热重载,可以取消下面的注释
// hot: false,
// liveReload: false,
overlay: {
errors: true,
warnings: false
},
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
'/dev-api': {
target: baseUrl,
changeOrigin: true,
secure: false,
pathRewrite: {
'^/dev-api': ''
},
logLevel: 'debug'
},
// WebSocket 代理配置
// 注意target 使用 http://ws: true 会自动处理 WebSocket 升级
'/ws': {
target: baseUrl, // 使用配置的 baseUrl默认 http://localhost:30091
ws: true,
changeOrigin: true,
secure: false,
logLevel: 'debug'
},
// springdoc proxy
'^/v3/api-docs/(.*)': {
target: baseUrl,
changeOrigin: true
}
},
disableHostCheck: true
},
css: {
loaderOptions: {
sass: {
sassOptions: { outputStyle: "expanded" }
}
}
},
configureWebpack: {
name: name,
resolve: {
alias: {
'@': resolve('src')
}
},
plugins: [
new CompressionPlugin({
cache: false, // 不启用文件缓存
test: /\.(js|css|html|jpe?g|png|gif|svg)?$/i, // 压缩文件格式
filename: '[path][base].gz[query]', // 压缩后的文件名
algorithm: 'gzip', // 使用gzip压缩
minRatio: 0.8, // 压缩比例,小于 80% 的文件不会被压缩
deleteOriginalAssets: false // 压缩后删除原文件
})
],
},
chainWebpack(config) {
config.plugins.delete('preload') // TODO: need test
config.plugins.delete('prefetch') // TODO: need test
// set svg-sprite-loader
config.module
.rule('svg')
.exclude.add(resolve('src/assets/icons'))
.end()
config.module
.rule('icons')
.test(/\.svg$/)
.include.add(resolve('src/assets/icons'))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
})
.end()
config.when(process.env.NODE_ENV !== 'development', config => {
config
.plugin('ScriptExtHtmlWebpackPlugin')
.after('html')
.use('script-ext-html-webpack-plugin', [{
// `runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/
}])
.end()
config.optimization.splitChunks({
chunks: 'all',
cacheGroups: {
libs: {
name: 'chunk-libs',
test: /[\\/]node_modules[\\/]/,
priority: 10,
chunks: 'initial' // only package third parties that are initially dependent
},
elementUI: {
name: 'chunk-elementUI', // split elementUI into a single package
test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
priority: 20 // the weight needs to be larger than libs and app or it will be packaged into libs or app
},
commons: {
name: 'chunk-commons',
test: resolve('src/components'), // can customize your rules
minChunks: 3, // minimum common number
priority: 5,
reuseExistingChunk: true
}
}
})
config.optimization.runtimeChunk('single')
})
}
}