You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fu-hsi-web/vue.config.js

191 lines
5.8 KiB
JavaScript

const path = require('path')
const {
publicPath,
assetsDir,
outputDir,
lintOnSave,
transpileDependencies,
productionSourceMap,
runtimeCompiler,
title,
devPort,
providePlugin,
baseURL,
imageCompression
} = require('./src/config')
const { version, author } = require('./package.json')
const Webpack = require('webpack')
const WebpackBar = require('webpackbar')
const CompressionPlugin = require('compression-webpack-plugin')
const dayjs = require('dayjs')
const time = dayjs().format('YYYY-M-D HH:mm:ss')
process.env.VUE_APP_TITLE = title || '伏羲'
process.env.VUE_APP_AUTHOR = author || 'sst'
process.env.VUE_APP_UPDATE_TIME = time
process.env.VUE_APP_VERSION = version
const resolve = (dir) => path.join(__dirname, dir)
module.exports = {
publicPath,
assetsDir,
outputDir,
lintOnSave,
transpileDependencies,
runtimeCompiler,
productionSourceMap,
/* webpack-dev-server 相关配置 */
devServer: {
/* 是否开启热更新 */
/* 默认true hotOnly: false,//v4已经删除由hot: 'only'替代*/
hot: true,
port: devPort,
/* 是否使用协议https */
https: false,
/* 编译完成后自动打开浏览器 */
open: true,
/* 当有编译错误或者警告的时候显示一个全屏overlay */
client: {
overlay: false
},
/* 使用代理 */
/* proxy: 'http://v.juhe.cn', */
/* '/api' : {}, node, '/api', /api/xx/xx
最后代理的路径就是 http://xxx.xx.com/api/xx/xx
可是不对啊, 我正确的接口路径里面没有 /api . 所以就需要 pathRewrite, '^/api' : '', '/api'去掉,
这样既能有正确标识, 又能在请求接口的时候去掉api */
proxy: {
'/fuHsiApi': {
/* 目标代理服务器地址 */
target: baseURL,
/* 允许跨域将请求地址host修改为和被请求的接口一致 */
changeOrigin: true,
/* 路径重写 */
pathRewrite: {
'^/fuHsiApi': ''
}
}
}
/* 传递任何第三方插件选项 */
// pluginOptions: {}
},
configureWebpack() {
return {
resolve: {
fallback: {
path: require.resolve('path-browserify')
},
alias: {
'@': resolve('src')
}
},
plugins: [
/* gzip压缩 */
new CompressionPlugin({
test: /\.(js|css)?$/i, // 压缩文件类型
// filename: '[path].gz[query]', // 压缩后的文件名
algorithm: 'gzip', // 使用 gzip 压缩
minRatio: 0.8, // 压缩率小于 1 才会压缩
threshold: 10240, // 对超过 10k 的数据压缩
deleteOriginalAssets: false // 是否删除未压缩的文件(源文件),不建议开启
}),
new Webpack.ProvidePlugin(providePlugin),
new WebpackBar({
name: title
})
]
}
},
chainWebpack(config) { // 接收webpack-chain的ChainableConfig实例允许对内部的webpack配置进行更细粒度的修改
config.plugins.delete('preload')
config.plugins.delete('prefetch')
// set svg-sprite-loader
config.module
.rule('svg')
.exclude.add(resolve('src/icons'))
.end()
config.module
.rule('icons')
.test(/\.svg$/)
.include.add(resolve('src/icons'))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
})
.end()
if (imageCompression) {
config.module
.rule('images')
.test(/\.(gif|png|jpe?g)$/i)
.use('image-webpack-loader')
.loader('image-webpack-loader')
.options({
bypassOnDebug: true
})
.end()
}
config.when(process.env.NODE_ENV !== 'development', (config) => {
config.performance.set('hints', false)
// config.devtool('none')
config.optimization.splitChunks({
automaticNameDelimiter: '-',
chunks: 'all',
cacheGroups: {
chunk: {
name: 'vendors',
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(.*)[\\/]/, // in order to adapt to cnpm
priority: 30// 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
}
}
})
})
},
/* css相关配置 */
css: {
/* *.module.[ext] CSS Modules
设置为 false 后你就可以去掉文件名中的 .module 并将所有的 *.(css|scss|sass|less|styl(us)?) 文件视为 CSS Modules 模块 */
// requireModuleExtension: true,
/* 是否为 CSS 开启 source map */
sourceMap: false,
/* 向 CSS 相关的 loader 传递选项 */
loaderOptions: {
scss: {
additionalData(content, loaderContext) {
const { resourcePath, rootContext } = loaderContext
const relativePath = path.relative(rootContext, resourcePath)
if (relativePath.replace(/\\/g, '/') !== 'src/styles/variables.scss') {
return '@import "~@/styles/variables.scss";' + content
}
return content
}
}
}
}
}