rt-sim-training-client/vue.config.js
2020-05-21 15:51:56 +08:00

243 lines
10 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.

// import { getBasePathConfig } from '@/utils/baseUrl'
const path = require('path');
const defaultSettings = require('./src/settings.js');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const webpack = require('webpack');
// const CompressionPlugin = require('compression-webpack-plugin');
// const productionGzipExtensions = ['js', 'css'];
// const isProduction = process.env.NODE_ENV === 'production';
// let { version } = require('./package.json');
// version = version.replace(/\./g, '_');
const name = defaultSettings.title; // page title
const port = 9527; // dev port
// All configuration item explanations can be find in https://cli.vuejs.org/config/
module.exports = {
/**
* You will need to set publicPath if you plan to deploy your site under a sub path,
* for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
* then publicPath should be set to "/bar/".
* In most cases please use '/' !!!
* Detail: https://cli.vuejs.org/config/#publicpath
*/
publicPath: '/',
outputDir: 'dist',
assetsDir: 'static', // 相对于outputDir的静态资源(js、css、img、fonts)目录
lintOnSave: false,
// filenameHashing: true,
productionSourceMap: false, // 项目打包后是否压缩
devServer: {
port: port,
hotOnly: true,
overlay: {
warnings: false,
errors: true
}
// proxy: {
// // change xxx-api/login => mock/login
// // detail: https://cli.vuejs.org/config/#devserver-proxy
// [process.env.VUE_APP_BASE_API]: {
// target: `http://localhost:${port}/mock`,
// changeOrigin: true,
// pathRewrite: {
// ['^' + process.env.VUE_APP_BASE_API]: ''
// }
// }
// }
},
// css: {
// extract: true, // 是否使用css分离插件 ExtractTextPlugin
// sourceMap: false, // 开启 CSS source maps?
// loaderOptions: {
// css: {}, // 这里的选项会传递给 css-loader
// postcss: {} // 这里的选项会传递给 postcss-loader
// }, // css预设器配置项
// modules: false // 启用 CSS modules for all css / pre-processor files.
// },
// parallel: require('os').cpus().length > 1, // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建。
configureWebpack: config => {
// if (process.env.NODE_ENV === 'production') {
// // 为生产环境修改配置...
// config.mode = 'production';
// Object.assign(config, {
// output:{
// ...config.output,
// filename: `static/js/[name].[chunkhash].${version}.js`,
// chunkFilename: `static/js/[name].[chunkhash].${version}.js`
// }
// });
// // config.plugins = [
// // ...config.plugins,
// // new CompressionPlugin({
// // test:/\.js$|\.html$|.\css/, // 匹配文件名
// // threshold: 10240, // 对超过10k的数据压缩
// // deleteOriginalAssets: false // 不删除源文件
// // })
// // ];
// } else {
// // 为开发环境修改配置...
// config.mode = 'development';
// }
config.name = name;
config.resolve = {
extensions: ['.js', '.vue', '.json'],
// modules: [path.resolve(__dirname, './node_modules')],
alias: { // 添加别名
'@': path.resolve('src')
}
};
const appTarget = process.env.NODE_ENV === 'Local' || process.env.VUE_APP_PRO === 'local' ? 'HYD' : 'Common';
config.plugins.push(new webpack.NormalModuleReplacementPlugin(/(.*)_APP_TARGET(\.*)/,
function (resourse) {
resourse.request = resourse.request.replace(/APP_TARGET/, `${appTarget}`);
})
);
config.plugins.push(new CopyWebpackPlugin([
{
from: path.resolve(__dirname, './static'),
to: 'static',
ignore: ['.*']
}
]));
const externalsConfig = {
// 'vue': 'Vue',
// 'vuex': 'Vuex',
// 'vue-router': 'VueRouter',
// 'nprogress': 'NProgress',
// 'echarts': 'echarts',
// 'element-ui': 'ELEMENT'
};
config.externals = process.env.NODE_ENV === 'Local' || process.env.VUE_APP_PRO === 'local' ? {} : externalsConfig; // 配置CDN使用
},
// webpack配置
chainWebpack(config) {
// // 修复HMR
// config.resolve.symlinks(true);
config.plugins.delete('preload'); // TODO: need test
config.plugins.delete('prefetch'); // 移除 prefetch 插件 预先加载模块
// set svg-sprite-loader
config.module
.rule('svg')
.exclude.add(path.resolve('src/icons'))
.end();
config.module
.rule('icons')
.test(/\.svg$/)
.include.add(path.resolve('src/icons'))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
})
.end();
// set preserveWhitespace
config.module
.rule('vue')
.use('vue-loader')
.loader('vue-loader')
.tap(options => {
options.compilerOptions.preserveWhitespace = true;
return options;
})
.end();
config
// https://webpack.js.org/configuration/devtool/#development
.when(process.env.NODE_ENV === 'development',
config => config.devtool('cheap-source-map')
);
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', // async表示抽取异步模块all表示对所有模块生效initial表示对同步模块生效
cacheGroups: {
// libs: {
// name: 'chunk-libs',
// test: /[\\/]node_modules[\\/]/,
// priority: -10,
// chunks: 'initial' // only package third parties that are initially dependent
// },
vendors: {
test: /[\\/]node_modules[\\/]/,
name: 'vendor', // 要缓存的 分隔出来的 chunk 名称
priority: -10 // 缓存组优先级 数字越⼤大,优先级越⾼高
},
elementUI: {
name: 'elementUI',
test: /element-ui/,
// minChunks: 1,
priority: -10,
chunks: 'all'
},
xlsx: {
name: 'xlsx',
test: /xlsx/,
// minChunks: 1,
priority: -10,
chunks: 'all'
},
zrender: {
name: 'zrender',
test: /zrender/,
// minChunks: 1,
priority: -10,
chunks: 'all'
},
jmap: {
name: 'jmap',
test: path.resolve(__dirname, './src/jmap'),
priority: -10,
minChunks: 1,
reuseExistingChunk: true // 可设置是否重⽤用该chunk
},
jmapNew: {
name: 'jmapNew',
test: path.resolve(__dirname, './src/jmapNew'),
priority: -20,
minChunks: 1,
reuseExistingChunk: true
},
jlmap3d: {
name: 'jlmap3d',
test: path.resolve(__dirname, './src/jlmap3d'),
priority: -10,
minChunks: 1,
reuseExistingChunk: true
},
ibp: {
name: 'ibp',
test: path.resolve(__dirname, './src/ibp'),
priority: -10,
minChunks: 1,
reuseExistingChunk: true
}
}
});
config.optimization.runtimeChunk('single');
}
);
}
};