vue.config.js 2.6 KB

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