健康同学微信公众号h5项目
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

vue.config.js 5.4KB

11 månader sedan
11 månader sedan
11 månader sedan
11 månader sedan
11 månader sedan
11 månader sedan
11 månader sedan
11 månader sedan
11 månader sedan
11 månader sedan
11 månader sedan
11 månader sedan
11 månader sedan
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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 || '';
  7. // 生产环境,测试和正式
  8. const IS_PROD = ['test'].includes(process.env.NODE_ENV);
  9. const { defineConfig } = require('@vue/cli-service');
  10. // externals
  11. // const externals = {
  12. // vue: 'Vue',
  13. // 'vue-router': 'VueRouter',
  14. // vuex: 'Vuex',
  15. // vant: 'vant',
  16. // axios: 'axios'
  17. // }
  18. // CDN外链,会插入到index.html中
  19. // const cdn = {
  20. // // 开发环境
  21. // dev: {
  22. // css: [],
  23. // js: []
  24. // },
  25. // // 生产环境
  26. // build: {
  27. // css: ['https://cdn.jsdelivr.net/npm/vant@2.4.7/lib/index.css'],
  28. // js: [
  29. // 'https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js',
  30. // 'https://cdn.jsdelivr.net/npm/vue-router@3.1.5/dist/vue-router.min.js',
  31. // 'https://cdn.jsdelivr.net/npm/axios@0.19.2/dist/axios.min.js',
  32. // 'https://cdn.jsdelivr.net/npm/vuex@3.1.2/dist/vuex.min.js',
  33. // 'https://cdn.jsdelivr.net/npm/vant@2.4.7/lib/index.min.js'
  34. // ]
  35. // }
  36. // }
  37. module.exports = defineConfig({
  38. publicPath: './', // 署应用包时的基本 URL。 vue-router hash 模式使用
  39. // publicPath: '/app/', //署应用包时的基本 URL。 vue-router history模式使用
  40. outputDir: 'dist', // 生产环境构建文件的目录
  41. assetsDir: 'static', // outputDir的静态资源(js、css、img、fonts)目录
  42. lintOnSave: !IS_PROD,
  43. productionSourceMap: false, // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
  44. transpileDependencies: false,
  45. devServer: {
  46. port: 9093, // 端口
  47. open: false, // 启动后打开浏览器
  48. client: {
  49. overlay: {
  50. // 当出现编译器错误或警告时,在浏览器中显示全屏覆盖层
  51. warnings: false,
  52. errors: false
  53. }
  54. }
  55. // proxy: {
  56. // //配置跨域
  57. // '/api': {
  58. // target: "https://test.xxx.com",
  59. // // ws:true,
  60. // changOrigin:true,
  61. // pathRewrite:{
  62. // '^/api':'/'
  63. // }
  64. // }
  65. // }
  66. },
  67. css: {
  68. extract: IS_PROD, // 是否将组件中的 CSS 提取至一个独立的 CSS 文件中 (而不是动态注入到 JavaScript 中的 inline 代码)。
  69. sourceMap: false,
  70. loaderOptions: {
  71. scss: {
  72. // 向全局sass样式传入共享的全局变量, $src可以配置图片cdn前缀
  73. // 详情: https://cli.vuejs.org/guide/css.html#passing-options-to-pre-processor-loaders
  74. additionalData: `
  75. @import "assets/css/mixin.scss";
  76. @import "assets/css/variables.scss";
  77. $cdn: "${defaultSettings.$cdn}";
  78. `
  79. }
  80. }
  81. },
  82. configureWebpack: config => {
  83. config.name = name;
  84. // 为生产环境修改配置...
  85. // if (IS_PROD) {
  86. // // externals
  87. // config.externals = externals
  88. // }
  89. },
  90. chainWebpack: config => {
  91. /* config.plugins.delete('preload');
  92. config.plugins.delete('prefetch'); */
  93. // 别名 alias
  94. config.resolve.alias
  95. .set('@', resolve('src'))
  96. .set('assets', resolve('src/assets'))
  97. .set('api', resolve('src/api'))
  98. .set('views', resolve('src/views'))
  99. .set('components', resolve('src/components'));
  100. /**
  101. * 添加CDN参数到htmlWebpackPlugin配置中
  102. */
  103. // config.plugin('html').tap(args => {
  104. // if (IS_PROD) {
  105. // args[0].cdn = cdn.build
  106. // } else {
  107. // args[0].cdn = cdn.dev
  108. // }
  109. // return args
  110. // })
  111. /**
  112. * 设置保留空格
  113. */
  114. config.module
  115. .rule('vue')
  116. .use('vue-loader')
  117. .loader('vue-loader')
  118. .tap(options => {
  119. options.compilerOptions.preserveWhitespace = true;
  120. return options;
  121. })
  122. .end();
  123. /**
  124. * 打包分析
  125. */
  126. if (IS_PROD) {
  127. config.plugin('webpack-report').use(BundleAnalyzerPlugin, [
  128. {
  129. analyzerMode: 'static'
  130. }
  131. ]);
  132. }
  133. config
  134. // https://webpack.js.org/configuration/devtool/#development
  135. .when(!IS_PROD, config => config.devtool('cheap-source-map'));
  136. config.when(IS_PROD, config => {
  137. config.optimization.splitChunks({
  138. chunks: 'all',
  139. cacheGroups: {
  140. // cacheGroups 下可以可以配置多个组,每个组根据test设置条件,符合test条件的模块
  141. commons: {
  142. name: 'chunk-commons',
  143. test: resolve('src/components'),
  144. minChunks: 3, // 被至少用三次以上打包分离
  145. priority: 5, // 优先级
  146. reuseExistingChunk: true // 表示是否使用已有的 chunk,如果为 true 则表示如果当前的 chunk 包含的模块已经被抽取出去了,那么将不会重新生成新的。
  147. },
  148. node_vendors: {
  149. name: 'chunk-libs',
  150. chunks: 'initial', // 只打包初始时依赖的第三方
  151. test: /[\\/]node_modules[\\/]/,
  152. priority: 10
  153. },
  154. vantUI: {
  155. name: 'chunk-vantUI', // 单独将 vantUI 拆包
  156. priority: 20, // 数字大权重到,满足多个 cacheGroups 的条件时候分到权重高的
  157. test: /[\\/]node_modules[\\/]_?vant(.*)/
  158. }
  159. }
  160. });
  161. config.optimization.runtimeChunk('single');
  162. });
  163. }
  164. });