108 lines
3.9 KiB
JavaScript
108 lines
3.9 KiB
JavaScript
const path = require('path');
|
||
const Setting = require('./src/setting.env');
|
||
// 引入打包分析文件
|
||
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
|
||
// 引入js打包工具
|
||
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
|
||
|
||
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
|
||
|
||
const resolve = (dir) => {
|
||
return path.join(__dirname, dir);
|
||
};
|
||
// 项目部署基础
|
||
// 默认情况下,我们假设你的应用将被部署在域的根目录下,
|
||
// 例如:https://www.my-app.com/
|
||
// 默认:'/'
|
||
// 如果您的应用程序部署在子路径中,则需要在这指定子路径
|
||
// 例如:https://www.foobar.com/my-app/
|
||
// 需要将它改为'/my-app/'
|
||
// iview-admin线上演示打包路径: https://file.iviewui.com/admin-dist/
|
||
const BASE_URL = process.env.NODE_ENV === 'production' ? '/' : '/';
|
||
const env = process.env.NODE_ENV;
|
||
module.exports = {
|
||
// Project deployment base
|
||
// By default we assume your app will be deployed at the root of a domain,
|
||
// e.g. https://www.my-app.com/
|
||
// If your app is deployed at a sub-path, you will need to specify that
|
||
// sub-path here. For example, if your app is deployed at
|
||
// https://www.foobar.com/my-app/
|
||
// then change this to '/my-app/'
|
||
outputDir: Setting.outputDir,
|
||
runtimeCompiler: true,
|
||
productionSourceMap: false, //关闭生产环境下的SourceMap映射文件
|
||
baseUrl: BASE_URL,
|
||
// tweak internal webpack configuration.
|
||
// see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
|
||
// 如果你不需要使用eslint,把lintOnSave设为false即可
|
||
lintOnSave: false,
|
||
// 打包优化
|
||
configureWebpack: (config) => {
|
||
const pluginsPro = [];
|
||
pluginsPro.push(
|
||
// js文件压缩
|
||
new UglifyJsPlugin({
|
||
uglifyOptions: {
|
||
compress: {
|
||
drop_debugger: true,
|
||
drop_console: true, //生产环境自动删除console
|
||
pure_funcs: ['console.log'], //移除console
|
||
},
|
||
},
|
||
sourceMap: false,
|
||
parallel: true, //使用多进程并行运行来提高构建速度。默认并发运行数:os.cpus().length - 1。
|
||
}),
|
||
);
|
||
if (process.env.NODE_ENV === 'production') {
|
||
config.plugins = [...config.plugins, ...pluginsPro];
|
||
}
|
||
if (process.env.NODE_ENV === 'production') {
|
||
// 开启分离js
|
||
// config.optimization = {
|
||
// runtimeChunk: 'single',
|
||
// splitChunks: {
|
||
// chunks: 'all',
|
||
// maxInitialRequests: Infinity,
|
||
// minSize: 20000,
|
||
// cacheGroups: {
|
||
// vendor: {
|
||
// test: /[\\/]node_modules[\\/]/,
|
||
// name(module) {
|
||
// // get the name. E.g. node_modules/packageName/not/this/part.js
|
||
// // or node_modules/packageName
|
||
// const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
|
||
// // npm package names are URL-safe, but some servers don't like @ symbols
|
||
// return `npm.${packageName.replace('@', '')}`;
|
||
// },
|
||
// },
|
||
// },
|
||
// },
|
||
// };
|
||
}
|
||
},
|
||
chainWebpack: (config) => {
|
||
config.resolve.alias
|
||
.set('@', resolve('src')) // key,value自行定义,比如.set('@@', resolve('src/components'))
|
||
.set('_c', resolve('src/components'));
|
||
config.module
|
||
.rule('vue')
|
||
.test(/\.vue$/)
|
||
.end();
|
||
// 重新设置 alias
|
||
config.resolve.alias.set('@api', resolve('src/api'));
|
||
// node
|
||
config.node.set('__dirname', true).set('__filename', true);
|
||
config.plugin('monaco').use(new MonacoWebpackPlugin());
|
||
},
|
||
|
||
// 设为false打包时不生成.map文件
|
||
productionSourceMap: false,
|
||
// 这里写你调用接口的基础路径,来解决跨域,如果设置了代理,那你本地开发环境的axios的baseUrl要写为 '' ,即空字符串
|
||
devServer: {
|
||
port: 1617, // 端口
|
||
},
|
||
publicPath: '/admin',
|
||
assetsDir: 'system_static',
|
||
indexPath: 'index.html',
|
||
};
|