| // Licensed to the Apache Software Foundation (ASF) under one | |
| // or more contributor license agreements. See the NOTICE file | |
| // distributed with this work for additional information | |
| // regarding copyright ownership. The ASF licenses this file | |
| // to you under the Apache License, Version 2.0 (the | |
| // "License"); you may not use this file except in compliance | |
| // with the License. You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, | |
| // software distributed under the License is distributed on an | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| // KIND, either express or implied. See the License for the | |
| // specific language governing permissions and limitations | |
| // under the License. | |
| const path = require('path') | |
| const webpack = require('webpack') | |
| const fs = require('fs') | |
| const packageJson = fs.readFileSync('./package.json') | |
| const version = JSON.parse(packageJson).version || 'main' | |
| const createThemeColorReplacerPlugin = require('./theme.config') | |
| const UglifyJsPlugin = require('uglifyjs-webpack-plugin') | |
| function resolve (dir) { | |
| return path.join(__dirname, dir) | |
| } | |
| // vue.config.js | |
| const vueConfig = { | |
| publicPath: './', | |
| /* | |
| Vue-cli3: | |
| Crashed when using Webpack `import()` #2463 | |
| https://github.com/vuejs/vue-cli/issues/2463 | |
| */ | |
| /* | |
| pages: { | |
| index: { | |
| entry: 'src/main.js', | |
| chunks: ['chunk-vendors', 'chunk-common', 'index'] | |
| } | |
| }, | |
| */ | |
| configureWebpack: { | |
| plugins: [ | |
| // Ignore all locale files of moment.js | |
| new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), | |
| new webpack.IgnorePlugin(/@antv\/g2/), | |
| new webpack.DefinePlugin({ | |
| 'process.env': { | |
| PACKAGE_VERSION: '"' + version + '"' | |
| } | |
| }) | |
| ], | |
| optimization: { | |
| minimizer: [ | |
| new UglifyJsPlugin({ | |
| cache: true, | |
| parallel: true, | |
| uglifyOptions: { | |
| compress: false, | |
| ecma: 6, | |
| mangle: true | |
| }, | |
| sourceMap: true | |
| }) | |
| ], | |
| splitChunks: { | |
| cacheGroups: { | |
| commons: { | |
| test: /[\\/]node_modules[\\/]/, | |
| name: 'vendors', | |
| chunks: 'all' | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| chainWebpack: (config) => { | |
| config.resolve.alias | |
| .set('@public', resolve('public')) | |
| .set('@$', resolve('src')) | |
| .set('@api', resolve('src/api')) | |
| .set('@assets', resolve('src/assets')) | |
| .set('@comp', resolve('src/components')) | |
| .set('@views', resolve('src/views')) | |
| .set('@layout', resolve('src/layout')) | |
| .set('@static', resolve('src/static')) | |
| // do not emit errors as a warning | |
| config.module.rule('eslint').use('eslint-loader').tap( | |
| opts => ({ ...opts, emitWarning: false }) | |
| ) | |
| const svgRule = config.module.rule('svg') | |
| svgRule.uses.clear() | |
| svgRule | |
| .use('vue-loader') | |
| .loader('vue-loader') | |
| .end() | |
| .use('vue-svg-loader') | |
| .loader('vue-svg-loader') | |
| /* svgRule.oneOf('inline') | |
| .resourceQuery(/inline/) | |
| .use('vue-svg-loader') | |
| .loader('vue-svg-loader') | |
| .end() | |
| .end() | |
| .oneOf('external') | |
| .use('file-loader') | |
| .loader('file-loader') | |
| .options({ | |
| name: 'assets/[name].[hash:8].[ext]' | |
| }) | |
| */ | |
| }, | |
| css: { | |
| loaderOptions: { | |
| less: { | |
| modifyVars: { | |
| // https://ant.design/docs/spec/colors | |
| // https://vue.ant.design/docs/vue/customize-theme/ | |
| 'root-entry-name': 'default' | |
| }, | |
| javascriptEnabled: true | |
| } | |
| } | |
| }, | |
| devServer: { | |
| port: 5050, | |
| proxy: { | |
| '/client': { | |
| target: process.env.CS_URL || 'http://localhost:8080', | |
| secure: false, | |
| ws: false, | |
| changeOrigin: true, | |
| proxyTimeout: 10 * 60 * 1000, // 10 minutes | |
| cookieDomainRewrite: process.env.CS_COOKIE_HOST || 'localhost', | |
| cookiePathRewrite: { | |
| '/client': '/' | |
| } | |
| } | |
| }, | |
| https: process.env.HTTPS_KEY ? { | |
| key: process.env.HTTPS_KEY ? fs.readFileSync(process.env.HTTPS_KEY) : undefined, | |
| cert: process.env.HTTPS_CERT ? fs.readFileSync(process.env.HTTPS_CERT) : undefined, | |
| ca: process.env.HTTPS_CA ? fs.readFileSync(process.env.HTTPS_CA) : undefined, | |
| dhparam: process.env.HTTPS_DHPARAM ? fs.readFileSync(process.env.HTTPS_DHPARAM) : undefined | |
| } : false, | |
| public: process.env.PUBLIC_HOST || undefined, | |
| allowedHosts: process.env.ALLOWED_HOSTS ? JSON.parse(process.env.ALLOWED_HOSTS) : undefined | |
| }, | |
| lintOnSave: undefined, | |
| // babel-loader no-ignore node_modules/* | |
| transpileDependencies: [], | |
| pluginOptions: { | |
| i18n: { | |
| locale: 'en', | |
| fallbackLocale: 'en', | |
| localeDir: 'locales', | |
| enableInSFC: true | |
| } | |
| } | |
| } | |
| vueConfig.configureWebpack.plugins.push(createThemeColorReplacerPlugin()) | |
| module.exports = vueConfig |