2021-03-03 15:06:52 +08:00
|
|
|
'use strict'
|
|
|
|
const path = require('path')
|
|
|
|
const defaultSettings = require('./src/settings.js')
|
|
|
|
|
2021-07-30 11:04:38 +08:00
|
|
|
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
2021-10-25 17:02:36 +08:00
|
|
|
// const CompressionPlugin = require('compression-webpack-plugin')
|
2022-06-08 11:09:23 +08:00
|
|
|
const webpack = require('webpack')
|
|
|
|
const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin')
|
2021-03-03 15:06:52 +08:00
|
|
|
function resolve(dir) {
|
|
|
|
return path.join(__dirname, dir)
|
|
|
|
}
|
|
|
|
|
|
|
|
const name = defaultSettings.title || 'vue Admin Template' // page title
|
|
|
|
|
|
|
|
const port = process.env.port || process.env.npm_config_port || 9528 // dev port
|
2022-06-08 11:09:23 +08:00
|
|
|
const parallel = process.env.NODE_ENV === 'development'
|
2021-03-03 15:06:52 +08:00
|
|
|
module.exports = {
|
2021-03-08 13:45:22 +08:00
|
|
|
productionSourceMap: true,
|
2022-06-08 11:09:23 +08:00
|
|
|
parallel,
|
2021-03-08 13:45:22 +08:00
|
|
|
// 使用mock-server
|
2021-03-03 15:06:52 +08:00
|
|
|
devServer: {
|
|
|
|
port: port,
|
2021-05-12 16:19:41 +08:00
|
|
|
proxy: {
|
|
|
|
'^(?!/login)': {
|
|
|
|
target: 'http://localhost:8081/',
|
2022-04-13 13:39:29 +08:00
|
|
|
ws: true
|
2021-05-12 16:19:41 +08:00
|
|
|
}
|
|
|
|
},
|
2021-03-03 15:06:52 +08:00
|
|
|
open: true,
|
|
|
|
overlay: {
|
|
|
|
warnings: false,
|
|
|
|
errors: true
|
|
|
|
},
|
|
|
|
before: require('./mock/mock-server.js')
|
|
|
|
},
|
2021-07-30 11:04:38 +08:00
|
|
|
|
2021-03-25 18:58:05 +08:00
|
|
|
pages: {
|
|
|
|
index: {
|
|
|
|
entry: 'src/main.js',
|
|
|
|
template: 'public/index.html',
|
|
|
|
filename: 'index.html'
|
|
|
|
}
|
|
|
|
},
|
2021-03-03 15:06:52 +08:00
|
|
|
configureWebpack: {
|
|
|
|
name: name,
|
2022-04-18 13:37:04 +08:00
|
|
|
devtool: 'source-map',
|
2021-03-03 15:06:52 +08:00
|
|
|
resolve: {
|
|
|
|
alias: {
|
|
|
|
'@': resolve('src')
|
|
|
|
}
|
2021-07-30 11:04:38 +08:00
|
|
|
},
|
|
|
|
plugins: [
|
|
|
|
new CopyWebpackPlugin([
|
|
|
|
{
|
|
|
|
from: path.join(__dirname, 'static'),
|
|
|
|
to: path.join(__dirname, 'dist/static')
|
|
|
|
}
|
2022-06-08 11:09:23 +08:00
|
|
|
]),
|
|
|
|
new webpack.DllReferencePlugin({
|
|
|
|
context: process.cwd(),
|
|
|
|
manifest: require('./public/vendor/vendor-manifest.json')
|
|
|
|
}),
|
|
|
|
// 将 dll 注入到 生成的 html 模板中
|
|
|
|
new AddAssetHtmlPlugin({
|
|
|
|
// dll文件位置
|
|
|
|
filepath: path.resolve(__dirname, './public/vendor/*.js'),
|
|
|
|
// dll 引用路径
|
|
|
|
publicPath: './vendor',
|
|
|
|
// dll最终输出的目录
|
|
|
|
outputPath: './vendor'
|
|
|
|
})
|
2021-07-30 11:04:38 +08:00
|
|
|
]
|
2021-03-03 15:06:52 +08:00
|
|
|
},
|
2021-03-08 13:45:22 +08:00
|
|
|
chainWebpack: config => {
|
|
|
|
config.module.rules.delete('svg') // 删除默认配置中处理svg,
|
|
|
|
// const svgRule = config.module.rule('svg')
|
|
|
|
// svgRule.uses.clear()
|
2021-03-03 15:06:52 +08:00
|
|
|
config.module
|
2021-03-08 13:45:22 +08:00
|
|
|
.rule('svg-sprite-loader')
|
2021-03-03 15:06:52 +08:00
|
|
|
.test(/\.svg$/)
|
2021-03-08 13:45:22 +08:00
|
|
|
.include
|
|
|
|
.add(resolve('src/icons')) // 处理svg目录
|
2021-03-03 15:06:52 +08:00
|
|
|
.end()
|
|
|
|
.use('svg-sprite-loader')
|
|
|
|
.loader('svg-sprite-loader')
|
|
|
|
.options({
|
|
|
|
symbolId: 'icon-[name]'
|
|
|
|
})
|
2021-10-25 17:02:36 +08:00
|
|
|
if (process.env.NODE_ENV === 'production') {
|
|
|
|
/* config.plugin('compressionPlugin').use(new CompressionPlugin({
|
|
|
|
test: /\.(js|css|less)$/, // 匹配文件名
|
|
|
|
threshold: 10240, // 对超过10k的数据压缩
|
|
|
|
minRatio: 0.8,
|
|
|
|
deleteOriginalAssets: true // 删除源文件
|
|
|
|
})) */
|
|
|
|
}
|
2021-10-08 17:22:21 +08:00
|
|
|
},
|
|
|
|
css: {
|
|
|
|
loaderOptions: {
|
|
|
|
sass: {
|
|
|
|
prependData: `@import "@/style/index.scss"`
|
|
|
|
}
|
2022-10-20 14:06:51 +08:00
|
|
|
},
|
|
|
|
extract: {
|
|
|
|
ignoreOrder: true,
|
2021-10-08 17:22:21 +08:00
|
|
|
}
|
2021-03-08 13:45:22 +08:00
|
|
|
}
|
2021-03-03 15:06:52 +08:00
|
|
|
|
2021-03-08 13:45:22 +08:00
|
|
|
}
|