'use strict' // eslint-disable-next-line no-undef const path = require('path') // eslint-disable-next-line no-undef const defaultSettings = require('./src/settings.js') const CopyPlugin = require('copy-webpack-plugin') function resolve(dir) { // eslint-disable-next-line no-undef return path.join(__dirname, dir) } const name = defaultSettings.title || 'IRaCIS' // page title // eslint-disable-next-line no-undef module.exports = { 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, overlay: { warnings: false, errors: true }, proxy: { '/api': { // target: 'http://47.90.210.20:8000', //美国服务器 // target: 'http://123.56.181.144:8001', // 国内生产环境 // target: 'http://123.56.181.144:8060/api', // 国内测试环境1 // target: 'http://123.56.181.144:8000/api', // 国内测试环境 // target: 'http://123.56.94.154:8079', // 国内测试环境2 target: 'http://123.56.94.154:7000', // 国内测试环境2 // target: 'http://123.56.181.144:7000', changeOrigin: true, secure: false, pathRewrite: { '^/api': '' } } } }, configureWebpack: { name: name, output: { filename: `static/js/[name].[hash].js`, chunkFilename: `static/js/[name].[hash].js` }, plugins: [ new CopyPlugin([ { from: './node_modules/cornerstone-wado-image-loader/dist/cornerstoneWADOImageLoaderWebWorker.min.js', to: 'webWorker.js' }, { from: './node_modules/cornerstone-wado-image-loader/dist/cornerstoneWADOImageLoader.min.js', to: 'dicomCodecs.js' }, { from: './node_modules/@ffmpeg/core/dist/ffmpeg-core.js', to: 'ffmpeg-core.js' }, { from: './node_modules/@ffmpeg/core/dist/ffmpeg-core.wasm', to: 'ffmpeg-core.wasm' }, { from: './node_modules/@ffmpeg/core/dist/ffmpeg-core.worker.js', to: 'ffmpeg-core.worker.js' }, { from: path.resolve(__dirname, './static'), to: path.resolve(__dirname, './dist/static'), ignore: ['.*'] } ]) // new OfflinePlugin({}) ], performance: { hints: 'warning', // 入口起点的最大体积 maxEntrypointSize: 5000000000, // 生成文件的最大体积 maxAssetSize: 3000000000, // 只给出js的性能提示 assetFilter: function(assetFileName) { return assetFileName.endsWith('.js') } }, resolve: { alias: { '@': resolve('src'), 'modules': resolve('node_modules'), 'utils': resolve('src/utils') } } }, chainWebpack(config) { // config.plugins.delete('preload') // TODO: need test // config.plugins.delete('prefetch') // TODO: need test // set svg-sprite-loader config.module .rule('svg') .exclude.add(resolve('src/icons')) .add(resolve('src/assets/icons')) .end() config.module .rule('icons') .test(/\.svg$/) .include.add(resolve('src/icons')) .add(resolve('src/assets/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() } }