| const CompressionPlugin = require('compression-webpack-plugin'); |
| |
| module.exports = { |
| css: { |
| loaderOptions: { |
| sass: { |
| prependData: () => { |
| const envName = process.env.VUE_APP_ENV_NAME; |
| const hasCustomStyles = |
| process.env.CUSTOM_STYLES === 'true' ? true : false; |
| if (hasCustomStyles && envName !== undefined) { |
| // If there is an env name defined, import Sass |
| // overrides. |
| // It is important that these imports stay in this |
| // order to make sure enviroment overrides |
| // take precedence over the default BMC styles |
| return ` |
| @import "@/assets/styles/bmc/helpers"; |
| @import "@/env/assets/styles/_${envName}"; |
| @import "@/assets/styles/bootstrap/_helpers"; |
| `; |
| } else { |
| // Include helper imports so single file components |
| // do not need to include helper imports |
| |
| // BMC Helpers must be imported before Bootstrap helpers to |
| // take advantage of Bootstrap's use of the Sass !default |
| // statement. Moving this helper after results in Bootstrap |
| // variables taking precedence over BMC's |
| return ` |
| @import "@/assets/styles/bmc/helpers"; |
| @import "@/assets/styles/bootstrap/_helpers"; |
| `; |
| } |
| }, |
| }, |
| }, |
| }, |
| devServer: { |
| https: true, |
| proxy: { |
| '/': { |
| target: process.env.BASE_URL, |
| headers: { |
| Connection: 'keep-alive', |
| }, |
| onProxyRes: (proxyRes) => { |
| // This header is ignored in the browser so removing |
| // it so we don't see warnings in the browser console |
| delete proxyRes.headers['strict-transport-security']; |
| }, |
| }, |
| }, |
| port: 8000, |
| }, |
| productionSourceMap: false, |
| chainWebpack: (config) => { |
| config.module |
| .rule('vue') |
| .use('vue-svg-inline-loader') |
| .loader('vue-svg-inline-loader'); |
| }, |
| configureWebpack: (config) => { |
| const crypto = require('crypto'); |
| const crypto_orig_createHash = crypto.createHash; |
| crypto.createHash = (algorithm) => |
| crypto_orig_createHash(algorithm == 'md4' ? 'sha256' : algorithm); |
| |
| const envName = process.env.VUE_APP_ENV_NAME; |
| const hasCustomStore = process.env.CUSTOM_STORE === 'true' ? true : false; |
| const hasCustomRouter = process.env.CUSTOM_ROUTER === 'true' ? true : false; |
| const hasCustomAppNav = |
| process.env.CUSTOM_APP_NAV === 'true' ? true : false; |
| |
| if (envName !== undefined) { |
| if (hasCustomStore) { |
| // If env has custom store, resolve all store modules. Currently found |
| // in src/router/index.js src/store/api.js and src/main.js |
| config.resolve.alias['./store$'] = `@/env/store/${envName}.js`; |
| config.resolve.alias['../store$'] = `@/env/store/${envName}.js`; |
| } |
| if (hasCustomRouter) { |
| // If env has custom router, resolve routes in src/router/index.js |
| config.resolve.alias['./routes$'] = `@/env/router/${envName}.js`; |
| } |
| if (hasCustomAppNav) { |
| // If env has custom AppNavigation, resolve AppNavigationMixin module in src/components/AppNavigation/AppNavigation.vue |
| config.resolve.alias['./AppNavigationMixin$'] = |
| `@/env/components/AppNavigation/${envName}.js`; |
| } |
| } |
| |
| if (process.env.NODE_ENV === 'production') { |
| config.plugins.push( |
| new CompressionPlugin({ |
| deleteOriginalAssets: true, |
| }), |
| ); |
| } |
| }, |
| pluginOptions: { |
| i18n: { |
| localeDir: 'locales', |
| enableInSFC: true, |
| }, |
| }, |
| }; |