123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- const webpack = require('webpack');
- const isDev = process.env.NODE_ENV === 'development';
- // cdn链接
- const cdn = {
- css: [
- // antd css 由于引入失败只好放弃了antd的按需引入
- ],
- js: [
- // vue
- 'https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.min.js',
- // vue-router
- 'https://cdn.bootcdn.net/ajax/libs/vue-router/3.1.3/vue-router.min.js',
- // vuex
- 'https://cdn.bootcdn.net/ajax/libs/vuex/3.1.2/vuex.min.js',
- // axios
- 'https://cdn.bootcdn.net/ajax/libs/axios/0.18.0/axios.min.js',
- // moment
- 'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js',
- // lodash
- 'https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js',
- ],
- };
- const CompressionWebpackPlugin = require('compression-webpack-plugin');
- module.exports = {
- chainWebpack: (config) => {
- // 需要打包分析时取消注释
- // eslint-disable-next-line global-require
- // config.plugin('webpack-bundle-analyzer').use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin);
- // 配置cdn引入
- if (process.env.NODE_ENV === 'production' && process.env.VUE_APP_CDN === 'true') {
- const externals = {
- vue: 'Vue',
- axios: 'axios',
- 'vue-router': 'VueRouter',
- vuex: 'Vuex',
- moment: 'moment',
- lodash: '_',
- };
- config.externals(externals);
- // 通过 html-webpack-plugin 将 cdn 注入到 index.html 之中
- config.plugin('html').tap((args) => {
- // eslint-disable-next-line no-param-reassign
- args[0].cdn = cdn;
- return args;
- });
- }
- },
- configureWebpack: (config) => {
- // 代码 gzip
- const productionGzipExtensions = ['html', 'js', 'css'];
- // 开发模式下不走gzip
- if (!isDev) {
- config.plugins.push(
- new CompressionWebpackPlugin({
- filename: '[path].gz[query]',
- algorithm: 'gzip',
- test: new RegExp(`\\.(${productionGzipExtensions.join('|')})$`),
- threshold: 10240, // 只有大小大于该值的资源会被处理 10240
- minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理
- deleteOriginalAssets: false, // 删除原文件
- })
- );
- }
- // 不打包moment的语言包
- config.plugins.push(new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/));
- // 去除console
- if (process.env.NODE_ENV === 'production') {
- // eslint-disable-next-line no-param-reassign
- config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true;
- }
- },
- css: {
- loaderOptions: {
- less: {
- lessOptions: {
- modifyVars: {
- 'primary-color': '#09b955',
- // 'link-color': '#1DA57A',
- // 'border-radius-base': '2px',
- },
- javascriptEnabled: true,
- },
- },
- sass: {
- prependData: "@import '@/styles/index.scss';",
- },
- },
- },
- // webSocket本身不存在跨域问题,所以我们可以利用webSocket来进行非同源之间的通信。
- publicPath: './',
- devServer: {
- port: 1997,
- },
- productionSourceMap: false,
- };
|