207 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
'use strict'
 | 
						||
const { defineConfig } = require('@vue/cli-service')
 | 
						||
const NodePolyfillPlugin = require('node-polyfill-webpack-plugin')
 | 
						||
const WebpackAliyunOss = require('webpack-aliyun-oss')
 | 
						||
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
 | 
						||
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
 | 
						||
const CopyPlugin = require('copy-webpack-plugin')
 | 
						||
// const TerserWebpackPlugin = require('terser-webpack-plugin')
 | 
						||
const { resolve } = require('path')
 | 
						||
const webpack = require('webpack')
 | 
						||
const defaultSettings = require('./src/settings.js')
 | 
						||
const moment = require('moment')
 | 
						||
var distDate = moment(new Date()).format('YYYY-MM-DD')
 | 
						||
const name = process.env.NODE_ENV === 'usa' ? 'LILI' : defaultSettings.title || 'IRCIS' // page title
 | 
						||
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
 | 
						||
// eslint-disable-next-line no-undef
 | 
						||
module.exports = defineConfig({
 | 
						||
  // lintOnSave: false,
 | 
						||
  transpileDependencies: false,
 | 
						||
  publicPath: process.env.NODE_ENV === 'development' || process.env.VUE_APP_OSS_CONFIG_BUCKET === 'zyypacs-usa' ? process.env.VUE_APP_BASE_PATH : `${process.env.VUE_FILE_PATH}${process.env.VUE_APP_OSS_PATH}${distDate}/`,
 | 
						||
  // publicPath: '/',
 | 
						||
  outputDir: 'dist',
 | 
						||
  assetsDir: 'static',
 | 
						||
  productionSourceMap: false,
 | 
						||
  devServer: {
 | 
						||
    port: '8080',
 | 
						||
    headers: {
 | 
						||
      'Cross-Origin-Opener-Policy': 'same-origin',
 | 
						||
      'Cross-Origin-Embedder-Policy': 'require-corp'
 | 
						||
    },
 | 
						||
    // open: true,
 | 
						||
    client: {
 | 
						||
      overlay: {
 | 
						||
        warnings: true,
 | 
						||
        errors: true
 | 
						||
      }
 | 
						||
    },
 | 
						||
    proxy: {
 | 
						||
      '/UploadHub': {
 | 
						||
        target: 'http://123.56.94.154:7000', // 国内测试环境2
 | 
						||
        changeOrigin: true,
 | 
						||
        secure: false,
 | 
						||
        pathRewrite: {
 | 
						||
          '^/api': ''
 | 
						||
        }
 | 
						||
      },
 | 
						||
      '/IRaCISData': {
 | 
						||
        target: 'http://123.56.94.154:8060/', // 国内测试环境2
 | 
						||
        changeOrigin: true,
 | 
						||
        pathRewrite: {
 | 
						||
        }
 | 
						||
      },
 | 
						||
      '/api': {
 | 
						||
        target: 'http://106.14.89.110:30000',
 | 
						||
        changeOrigin: true,
 | 
						||
        secure: false,
 | 
						||
        pathRewrite: {
 | 
						||
          '^/api': ''
 | 
						||
        }
 | 
						||
      }
 | 
						||
    }
 | 
						||
  },
 | 
						||
  configureWebpack: {
 | 
						||
    name: name,
 | 
						||
    output: {
 | 
						||
      filename: `static/js/[name].[contenthash:8].js`,
 | 
						||
      chunkFilename: `static/js/[name].[chunkhash:8].js`,
 | 
						||
      assetModuleFilename: 'static/wasm/[name].[chunkhash:8][ext]'
 | 
						||
    },
 | 
						||
    resolve: {
 | 
						||
      fallback: {
 | 
						||
        'path': require.resolve('path-browserify')
 | 
						||
      },
 | 
						||
      alias: {
 | 
						||
        '@': resolve('src'),
 | 
						||
        'modules': resolve('node_modules'),
 | 
						||
        'utils': resolve('src/utils')
 | 
						||
      }
 | 
						||
    },
 | 
						||
 | 
						||
    experiments: {
 | 
						||
      // 基于异步模块的 WebAssembly 实验性特性
 | 
						||
      // syncWebAssembly: true,
 | 
						||
      asyncWebAssembly: true
 | 
						||
    },
 | 
						||
    plugins: [
 | 
						||
      new CopyPlugin({
 | 
						||
        patterns: [
 | 
						||
          {
 | 
						||
            from: resolve(__dirname, './static'),
 | 
						||
            to: resolve(__dirname, './dist/static'),
 | 
						||
            globOptions: {
 | 
						||
              ignore: ['.*']
 | 
						||
            }
 | 
						||
 | 
						||
          }
 | 
						||
        ]
 | 
						||
      }),
 | 
						||
      // new BundleAnalyzerPlugin(),
 | 
						||
      process.env.NODE_ENV === 'development' || process.env.VUE_APP_OSS_CONFIG_BUCKET === 'zyypacs-usa' ? function () { }
 | 
						||
        : new WebpackAliyunOss({
 | 
						||
          from: ['./dist/**'],
 | 
						||
          dist: process.env.VUE_APP_OSS_PATH + distDate,
 | 
						||
          region: process.env.OSS_REGION,
 | 
						||
          accessKeyId: process.env.OSS_ACCESS_KEY_ID,
 | 
						||
          accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
 | 
						||
          bucket: process.env.OSS_BUCKET,
 | 
						||
          overwrite: true,
 | 
						||
          setOssPath: filePath => {
 | 
						||
            const index = filePath.lastIndexOf('dist')
 | 
						||
            const Path = filePath.substring(index + 4, filePath.length)
 | 
						||
            return Path.replace(/\\/g, '/')
 | 
						||
          },
 | 
						||
          setHeaders: filePath => {
 | 
						||
            return {
 | 
						||
              'Cache-Control': 'max-age=31536000'
 | 
						||
            }
 | 
						||
          }
 | 
						||
        }),
 | 
						||
      new MiniCssExtractPlugin({
 | 
						||
        filename: 'static/css/[name].[contenthash:8].css'
 | 
						||
      }),
 | 
						||
      new NodePolyfillPlugin(),
 | 
						||
      new webpack.ProvidePlugin({
 | 
						||
        process: 'process/browser'
 | 
						||
      })
 | 
						||
      // new OfflinePlugin({})
 | 
						||
    ],
 | 
						||
    // 如果需要对 .wasm 文件进行特殊处理,可以添加 module.rules 配置
 | 
						||
    module: {
 | 
						||
      rules: [
 | 
						||
        {
 | 
						||
          test: /\.wasm$/,
 | 
						||
          type: 'asset/resource'
 | 
						||
        }
 | 
						||
      ]
 | 
						||
    },
 | 
						||
    optimization: {
 | 
						||
      splitChunks: {
 | 
						||
        chunks: 'all',
 | 
						||
        cacheGroups: {
 | 
						||
          libs: { // 第三方库
 | 
						||
            name: 'chunk-libs',
 | 
						||
            test: /[\V/]node_modules[\\/]/,
 | 
						||
            priority: 10,
 | 
						||
            chunks: 'initial' // 只打包初始时依赖的第三方
 | 
						||
          },
 | 
						||
          elementUI: { // elementuI 单独拆包
 | 
						||
            name: 'chunk-elementUI',
 | 
						||
            test: /[\V/]node_modules[\V]element-ui[\/]/,
 | 
						||
            priority: 20 // 权重要大于 libs
 | 
						||
          },
 | 
						||
          commons: { // 公共模块包
 | 
						||
            name: `chunk-commons`,
 | 
						||
            test: /[\\/]src[\\/]/, // can customize your rules
 | 
						||
            minSize: 1024,
 | 
						||
            chunks: 'initial',
 | 
						||
            priority: 5
 | 
						||
          },
 | 
						||
          default: {
 | 
						||
            minChunks: 2,
 | 
						||
            priority: -20,
 | 
						||
            reuseExistingChunk: true
 | 
						||
          }
 | 
						||
        }
 | 
						||
      },
 | 
						||
      minimize: process.env.NODE_ENV !== 'development',
 | 
						||
      minimizer: process.env.NODE_ENV === 'development' ? [] : [
 | 
						||
        new CssMinimizerPlugin()
 | 
						||
      ]
 | 
						||
      // minimizer: process.env.NODE_ENV === 'development' ? [] : [
 | 
						||
      //   // 配置生产环境的压缩方案:js和css
 | 
						||
      //   // new TerserWebpackPlugin({
 | 
						||
      //   //   // 开启多进程打包
 | 
						||
      //   //   parallel: true
 | 
						||
      //   // }),
 | 
						||
      //   new CssMinimizerPlugin()
 | 
						||
      // ]
 | 
						||
    },
 | 
						||
    performance: {
 | 
						||
      hints: false,
 | 
						||
      // 入口起点的最大体积
 | 
						||
      maxEntrypointSize: 5000000000,
 | 
						||
      // 生成文件的最大体积
 | 
						||
      maxAssetSize: 3000000000,
 | 
						||
      // 只给出js的性能提示
 | 
						||
      assetFilter: function (assetFileName) {
 | 
						||
        return assetFileName.endsWith('.js')
 | 
						||
      }
 | 
						||
    }
 | 
						||
  },
 | 
						||
  chainWebpack: (config) => {
 | 
						||
    config.module.rule('svg').exclude.add(resolve('src/icons')).end()
 | 
						||
    config.module
 | 
						||
      .rule('icons')
 | 
						||
      .test(/\.svg$/)
 | 
						||
      .include.add(resolve('src/icons'))
 | 
						||
      .end()
 | 
						||
      .use('svg-sprite-loader')
 | 
						||
      .loader('svg-sprite-loader')
 | 
						||
      .options({
 | 
						||
        symbolId: 'icon-[name]'
 | 
						||
      })
 | 
						||
      .end()
 | 
						||
  }
 | 
						||
})
 |