vue.config.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. const prodConfig = require("./prod.config");
  2. const path = require("path");
  3. function resolve(dir) {
  4. return path.join(__dirname, dir);
  5. }
  6. module.exports = {
  7. publicPath: process.env.VUE_APP_PUB_URL,
  8. assetsDir: prodConfig.assetsDir,
  9. productionSourceMap: false,
  10. devServer: {
  11. // * 接口跨域处理
  12. proxy: {
  13. "/api": {
  14. target: process.env.MAIN_API_URL,
  15. changeOrigin: true,
  16. },
  17. },
  18. disableHostCheck: true,
  19. },
  20. css: {
  21. sourceMap: false,
  22. loaderOptions: {
  23. scss: {
  24. prependData: `@import "~@/scss/variables.scss";`,
  25. },
  26. less: {
  27. lessOptions: {
  28. modifyVars: {
  29. "primary-color": "#39a4ff",
  30. "link-color": "#39a4ff",
  31. },
  32. javascriptEnabled: true,
  33. },
  34. },
  35. },
  36. },
  37. configureWebpack: {
  38. devtool: "source-map",
  39. externals: prodConfig.externals,
  40. optimization: prodConfig.optimization,
  41. plugins: prodConfig.plugins,
  42. resolve: {
  43. extensions: [".js", ".vue", ".json", ".ts"],
  44. },
  45. performance: {
  46. hints: false,
  47. },
  48. },
  49. chainWebpack: (config) => {
  50. // * 移除prefetch和preload
  51. config.resolve.alias
  52. .set("@", resolve("src"))
  53. .set("assets", resolve("src/assets"));
  54. config.plugins.delete("prefetch");
  55. config.plugins.delete("preload");
  56. if (process.env.NODE_ENV === "production") {
  57. // config.entry("index").add("babel-polyfill");
  58. prodConfig.uploadAssetsToOSS(config);
  59. // prodConfig.assetsGzip(config);
  60. config.optimization.delete("splitChunks");
  61. config.plugin("html").tap((args) => {
  62. // 加上属性引号
  63. args[0].minify.removeAttributeQuotes = false;
  64. args[0].cdn = prodConfig.cdns.build;
  65. return args;
  66. });
  67. }
  68. },
  69. };