健康同学微信公众号h5项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

vue.config.js 4.0KB

11 月之前
11 月之前
11 月之前
11 月之前
11 月之前
11 月之前
11 月之前
11 月之前
11 月之前
11 月之前
11 月之前
11 月之前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. const path = require('path');
  2. const defaultSettings = require('./src/config/index.js');
  3. /* const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; */
  4. const resolve = dir => path.join(__dirname, dir);
  5. // page title
  6. const name = defaultSettings.title || 'health-student';
  7. // 生产环境,测试和正式
  8. const IS_PROD = ['production', 'test'].includes(process.env.NODE_ENV);
  9. const { defineConfig } = require('@vue/cli-service');
  10. module.exports = defineConfig({
  11. publicPath: './', // 署应用包时的基本 URL。 vue-router hash 模式使用
  12. // publicPath: '/app/', //署应用包时的基本 URL。 vue-router history模式使用
  13. outputDir: 'dist', // 生产环境构建文件的目录
  14. lintOnSave: !IS_PROD,
  15. productionSourceMap: false, // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
  16. devServer: {
  17. port: 9093, // 端口
  18. open: false, // 启动后打开浏览器
  19. hot: true, //热更新
  20. client: {
  21. overlay: false //报错是否显示遮罩层,不显示
  22. }
  23. // proxy: {
  24. // //配置跨域
  25. // '/api': {
  26. // target: "https://test.xxx.com",
  27. // // ws:true,
  28. // changOrigin:true,
  29. // pathRewrite:{
  30. // '^/api':'/'
  31. // }
  32. // }
  33. // }
  34. },
  35. css: {
  36. extract: true, // 是否将组件中的 CSS 提取至一个独立的 CSS 文件中 (而不是动态注入到 JavaScript 中的 inline 代码)。
  37. sourceMap: false,
  38. loaderOptions: {
  39. scss: {
  40. // 向全局sass样式传入共享的全局变量, $src可以配置图片cdn前缀
  41. // 详情: https://cli.vuejs.org/guide/css.html#passing-options-to-pre-processor-loaders
  42. additionalData: `
  43. @import "assets/css/mixin.scss";
  44. @import "assets/css/variables.scss";
  45. `
  46. }
  47. }
  48. },
  49. configureWebpack: config => {
  50. config.name = name;
  51. // 为生产环境修改配置...
  52. },
  53. chainWebpack: config => {
  54. // 别名 alias
  55. config.resolve.alias
  56. .set('@', resolve('src'))
  57. .set('assets', resolve('src/assets'))
  58. .set('api', resolve('src/api'))
  59. .set('views', resolve('src/views'))
  60. .set('components', resolve('src/components'));
  61. /**
  62. * 设置保留空格
  63. */
  64. config.module
  65. .rule('vue')
  66. .use('vue-loader')
  67. .loader('vue-loader')
  68. .tap(options => {
  69. options.compilerOptions.preserveWhitespace = true;
  70. return options;
  71. })
  72. .end();
  73. /**
  74. * 打包分析
  75. */
  76. if (IS_PROD) {
  77. /* config.plugin('webpack-report').use(BundleAnalyzerPlugin, [
  78. {
  79. analyzerMode: 'static'
  80. }
  81. ]); */
  82. }
  83. config
  84. // https://webpack.js.org/configuration/devtool/#development
  85. .when(!IS_PROD, config => config.devtool('cheap-source-map'));
  86. config.when(IS_PROD, config => {
  87. config.optimization.splitChunks({
  88. chunks: 'all',
  89. cacheGroups: {
  90. // cacheGroups 下可以可以配置多个组,每个组根据test设置条件,符合test条件的模块
  91. commons: {
  92. name: 'chunk-commons',
  93. test: resolve('src/components'),
  94. minChunks: 3, // 被至少用三次以上打包分离
  95. priority: 5, // 优先级
  96. reuseExistingChunk: true // 表示是否使用已有的 chunk,如果为 true 则表示如果当前的 chunk 包含的模块已经被抽取出去了,那么将不会重新生成新的。
  97. },
  98. node_vendors: {
  99. name: 'chunk-libs',
  100. chunks: 'initial', // 只打包初始时依赖的第三方
  101. test: /[\\/]node_modules[\\/]/,
  102. priority: 10
  103. },
  104. vantUI: {
  105. name: 'chunk-vantUI', // 单独将 vantUI 拆包
  106. priority: 20, // 数字大权重到,满足多个 cacheGroups 的条件时候分到权重高的
  107. test: /[\\/]node_modules[\\/]_?vant(.*)/
  108. }
  109. }
  110. });
  111. config.optimization.runtimeChunk('single');
  112. });
  113. }
  114. });