vue.config.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. const path = require('path');
  2. const webpack = require('webpack');
  3. const glob = require('glob');
  4. function getMultPages() {
  5. const defaultTemplate = 'public/index.html';
  6. const enteies = {};
  7. const apps = glob.sync('src/apps/**/main.js');
  8. apps.forEach(path => {
  9. const reg = /\/(\w+)\/main.js$/.exec(path);
  10. if (reg && reg[1]) {
  11. const tem = glob.sync(`src/apps/${reg[1]}/index.html`);
  12. const name = reg[1].toLowerCase();
  13. enteies[name] = {
  14. entry: path,
  15. template: tem.length ? tem[0] : defaultTemplate,
  16. filename: `${process.env.NODE_ENV === 'development' ? `${name}/` : ''}index.html`,
  17. title: name,
  18. };
  19. }
  20. });
  21. return enteies;
  22. }
  23. function filterPages(pages) {
  24. if (process.env.NODE_ENV === 'development') {
  25. if (process.env.VUE_APP_LOCAL_ENV && process.env.VUE_APP_LOCAL_ENV !== '*') {
  26. const apps = process.env.VUE_APP_LOCAL_ENV.toLowerCase();
  27. Object.keys(pages).forEach(key => {
  28. if (!apps.includes(key)) {
  29. delete pages[key];
  30. }
  31. });
  32. }
  33. } else {
  34. const buildApp = process.argv.slice(2)[1];
  35. if (pages[buildApp]) {
  36. pages = { [buildApp]: pages[buildApp] };
  37. }
  38. }
  39. return pages;
  40. }
  41. let pages = filterPages(getMultPages());
  42. module.exports = {
  43. baseUrl: process.env.VUE_APP_BUILD_BASE_URL,
  44. pages,
  45. outputDir: path.join('dist', process.env.NODE_ENV === 'development' ? '' : Object.keys(pages)[0]),
  46. configureWebpack: {
  47. performance: {
  48. maxEntrypointSize: 512000,
  49. maxAssetSize: 1024000,
  50. },
  51. },
  52. chainWebpack: config => {
  53. Object.keys(pages).forEach(name => {
  54. // config.plugins.delete(`preload-${name}`);
  55. config.plugins.delete(`prefetch-${name}`);
  56. config.plugin('provide').use(
  57. new webpack.ProvidePlugin({
  58. t: [path.join(__dirname, 'src/commonutils/test'), 'default'],
  59. })
  60. );
  61. });
  62. },
  63. css: {
  64. sourceMap: false,
  65. loaderOptions: {
  66. stylus: {
  67. import: [path.join(__dirname, 'src/assets/css/fun.styl')],
  68. },
  69. },
  70. },
  71. devServer: {
  72. overlay: {
  73. warnings: false,
  74. errors: true,
  75. },
  76. disableHostCheck: true,
  77. host: '0.0.0.0',
  78. port: 8081,
  79. proxy: {
  80. '/api': {
  81. target: process.env.VUE_APP_MOBILE_API_BASE_URL,
  82. // target: 'http://192.168.0.134:20250/api',
  83. ws: true,
  84. changOrigin: true,
  85. pathRewrite: {
  86. '^/api': '',
  87. },
  88. },
  89. },
  90. historyApiFallback: {
  91. rewrites: Object.keys(pages).map(name => {
  92. const re = new RegExp(`^/${name}/(?!.*\\.\\w+)`);
  93. const obj = {
  94. from: new RegExp(`^/${name}`),
  95. to(context) {
  96. return re.test(context.parsedUrl.path) ? `/${name}` : context.parsedUrl.path;
  97. },
  98. };
  99. return obj;
  100. }),
  101. },
  102. },
  103. };