lilishop-ui/im/vue.config.js

126 lines
3.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

const path = require('path')
// compression-webpack-plugin添加压缩文件类型
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const productionGzipExtensions = ['js', 'css']
const isProd = process.env.NODE_ENV === 'production'
function resolve(dir) {
return path.join(__dirname, dir)
}
const assetsCDN = {
externals: {
vue: 'Vue',
'vue-router': 'VueRouter',
vuex: 'Vuex',
axios: 'axios',
},
css: [],
js: [
'https://unpkg.com/vue@2.6.11/dist/vue.min.js',
'https://unpkg.com/vue-router@3.4.9/dist/vue-router.min.js',
'https://unpkg.com/vuex@3.5.1/dist/vuex.min.js',
'https://unpkg.com/axios@0.21.0/dist/axios.min.js',
],
}
// vue.config.js
const vueConfig = {
// 公共路径(必须有的)
publicPath: '/',
// 输出文件目录
outputDir: 'dist',
// 静态资源存放的文件夹(相对于ouputDir)
assetsDir: 'static',
runtimeCompiler: false,
devServer: {
port: 8000,
// proxy: {
// //配置跨域
// '/api': {
// target: 'http://api.xxxx.com', // 后台接口域名
// ws: false, //如果要代理 websockets配置这个参数
// secure: false, // 如果是https接口需要配置这个参数
// changeOrigin: true, //是否跨域
// pathRewrite: {
// '^/api': '/api',
// },
// },
// },
},
configureWebpack: {
// webpack plugins
plugins: [
// 配置大文件压缩相关参数
new CompressionWebpackPlugin({
filename: '[path][base].gz',
algorithm: 'gzip',
test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
threshold: 10240,
minRatio: 0.8,
}),
],
// if prod, add externals
externals: isProd ? assetsCDN.externals : {},
},
chainWebpack: config => {
config.resolve.alias.set('@', resolve('src'))
const svgRule = config.module.rule('svg')
svgRule.uses.clear()
svgRule
.oneOf('inline')
.resourceQuery(/inline/)
.use('vue-svg-icon-loader')
.loader('vue-svg-icon-loader')
.end()
.end()
.oneOf('external')
.use('file-loader')
.loader('file-loader')
.options({
name: 'assets/[name].[hash:8].[ext]',
})
// if prod is on
// assets require on cdn
if (isProd) {
config.plugin('html').tap(args => {
args[0].cdn = assetsCDN
return args
})
}
},
pluginOptions: {
'style-resources-loader': {
preProcessor: 'less',
patterns: [
//全局加载 less 变量
path.resolve(__dirname, './src/assets/css/variable.less'),
],
},
},
css: {
loaderOptions: {
less: {
lessOptions: {
modifyVars: {},
javascriptEnabled: true,
},
},
},
},
// 是否为生产环境构建生成 source map
productionSourceMap: false,
// lintOnSave: undefined,
lintOnSave: false,
// babel-loader no-ignore node_modules/*
transpileDependencies: [],
}
module.exports = vueConfig