vue.config.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. const path = require("path");
  2. const resolve = (dir) => path.join(__dirname, dir);
  3. const proxy = {
  4. "/api/uq_basic": {
  5. target: process.env.VUE_APP_QUESTIONS_HOST_URL,
  6. changeOrigin: true,
  7. },
  8. "/api/open": {
  9. target: process.env.VUE_APP_QUESTIONS_HOST_URL,
  10. changeOrigin: true,
  11. },
  12. "/file/": {
  13. target: process.env.VUE_APP_QUESTIONS_HOST_URL,
  14. changeOrigin: true,
  15. },
  16. };
  17. var webpack = require("webpack");
  18. var packageData = require("./package.json");
  19. var v = packageData.version;
  20. const timestamp = Date.now();
  21. let config = {
  22. // 这里设置项目的路径,比如 '/admin' 。设置以后 BASE_URL就有值了。
  23. // 注意这解决不了CDN的问题,CDN的问题要另行研究。
  24. // 可能的方案是另设一个替代 BASE_URL 的环境变量解决 <%%= BASE_URL %%>favicon.ico 和 ${process.env.BASE_URL}service-worker.js
  25. publicPath: "/admin",
  26. lintOnSave: process.env.NODE_ENV !== "production" ? true : "error",
  27. devServer: {
  28. proxy,
  29. // https://webpack.js.org/configuration/dev-server/#overlay
  30. client: {
  31. overlay: false,
  32. },
  33. },
  34. configureWebpack: {
  35. // devtool: "source-map", // for vscode debug
  36. plugins: [
  37. // Ignore all locale files of moment.js
  38. new webpack.IgnorePlugin({
  39. resourceRegExp: /^\.\/locale$/,
  40. contextRegExp: /moment$/,
  41. }),
  42. // new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
  43. ],
  44. },
  45. transpileDependencies: [/\bvue-awesome\b/],
  46. productionSourceMap: false,
  47. chainWebpack(config) {
  48. config.module.rule("svg").exclude.add(resolve("./src/assets/icons")).end();
  49. config.module
  50. .rule("icons")
  51. .test(/\.svg$/)
  52. .include.add(resolve("./src/assets/icons"))
  53. .end()
  54. .use("svg-sprite-loader")
  55. .loader("svg-sprite-loader")
  56. .options({
  57. symbolId: "icon-[name]",
  58. })
  59. .end();
  60. },
  61. css: {
  62. loaderOptions: {
  63. scss: {
  64. additionalData: `@import "@/assets/styles/variables.scss";`, // 不同版本的 sass,此属性不同:data、prependData、additionalData
  65. sassOptions: { outputStyle: "expanded" }, // fix: 解决 element-ui 图标 icon 偶现乱码问题
  66. },
  67. },
  68. },
  69. };
  70. if (process.env.NODE_ENV === "production") {
  71. config.css = Object.assign(config.css || {}, {
  72. extract: {
  73. filename: `css/[name].${v}.${timestamp}.css`,
  74. chunkFilename: `css/[name].${v}.${timestamp}.css`,
  75. },
  76. });
  77. config.configureWebpack = Object.assign(config.configureWebpack || {}, {
  78. output: {
  79. filename: `js/[name].${v}.${timestamp}.js`,
  80. chunkFilename: `js/[name].${v}.${timestamp}.js`,
  81. },
  82. });
  83. }
  84. module.exports = config;
  85. require("events").EventEmitter.defaultMaxListeners = 0;