vue.config.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. const path = require('path');
  2. const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
  3. module.exports = {
  4. // 基本路径
  5. /* 部署生产环境和开发环境下的URL:可对当前环境进行区分,baseUrl 从 Vue CLI 3.3 起已弃用,要使用publicPath */
  6. /* baseUrl: process.env.NODE_ENV === 'production' ? './' : '/' */
  7. publicPath: process.env.NODE_ENV === 'production' ? './' : './',
  8. // 输出文件目录
  9. outputDir: 'dist',
  10. // eslint-loader 是否在保存的时候检查
  11. lintOnSave: false,
  12. // use the full build with in-browser compiler?
  13. // https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only
  14. // compiler: false,
  15. runtimeCompiler: true, //关键点在这
  16. // 调整内部的 webpack 配置。
  17. // 查阅 https://github.com/vuejs/vue-doc-zh-cn/vue-cli/webpack.md
  18. // webpack配置
  19. // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
  20. chainWebpack: () => {},
  21. configureWebpack: (config) => {
  22. if (process.env.NODE_ENV === 'production') {
  23. // 为生产环境修改配置...
  24. config.mode = 'production';
  25. // 将每个依赖包打包成单独的js文件
  26. var optimization = {
  27. runtimeChunk: 'single',
  28. splitChunks: {
  29. chunks: 'all',
  30. maxInitialRequests: Infinity,
  31. minSize: 20000, // 依赖包超过20000bit将被单独打包
  32. cacheGroups: {
  33. vendor: {
  34. test: /[\\/]node_modules[\\/]/,
  35. name(module) {
  36. // get the name. E.g. node_modules/packageName/not/this/part.js
  37. // or node_modules/packageName
  38. const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
  39. // npm package names are URL-safe, but some servers don't like @ symbols
  40. return `npm.${packageName.replace('@', '')}`;
  41. }
  42. }
  43. }
  44. },
  45. minimizer: [
  46. new UglifyJsPlugin({
  47. uglifyOptions: {
  48. // 删除注释
  49. output: {
  50. comments: false
  51. },
  52. // 删除console debugger 删除警告
  53. compress: {
  54. warnings: false,
  55. drop_console: true, //console
  56. drop_debugger: false,
  57. pure_funcs: [ 'console.log' ] //移除console
  58. }
  59. }
  60. })
  61. ]
  62. };
  63. Object.assign(config, {
  64. optimization
  65. });
  66. } else {
  67. // 为开发环境修改配置...
  68. config.mode = 'development';
  69. var optimization2 = {
  70. runtimeChunk: 'single',
  71. splitChunks: {
  72. chunks: 'all',
  73. maxInitialRequests: Infinity,
  74. minSize: 20000, // 依赖包超过20000bit将被单独打包
  75. cacheGroups: {
  76. vendor: {
  77. test: /[\\/]node_modules[\\/]/,
  78. name(module) {
  79. // get the name. E.g. node_modules/packageName/not/this/part.js
  80. // or node_modules/packageName
  81. const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
  82. // npm package names are URL-safe, but some servers don't like @ symbols
  83. return `npm.${packageName.replace('@', '')}`;
  84. }
  85. }
  86. }
  87. }
  88. };
  89. }
  90. Object.assign(config, {
  91. // 开发生产共同配置
  92. // externals: {
  93. // 'vue': 'Vue',
  94. // 'element-ui': 'ELEMENT',
  95. // 'vue-router': 'VueRouter',
  96. // 'vuex': 'Vuex'
  97. // } // 防止将某些 import 的包(package)打包到 bundle 中,而是在运行时(runtime)再去从外部获取这些扩展依赖(用于csdn引入)
  98. resolve: {
  99. extensions: [ '.js', '.vue', '.json', '.ts' ], //文件优先解析后缀名顺序
  100. alias: {
  101. '@': path.resolve('./src')
  102. }, // 别名配置
  103. plugins: []
  104. },
  105. optimization: optimization2
  106. });
  107. },
  108. // vue-loader 配置项
  109. // https://vue-loader.vuejs.org/en/options.html
  110. // vueLoader: {},
  111. // 生产环境是否生成 sourceMap 文件
  112. productionSourceMap: false,
  113. // css相关配置
  114. css: {
  115. // 是否使用css分离插件 ExtractTextPlugin
  116. // extract: true, //注释css热更新生效
  117. // 开启 CSS source maps?
  118. sourceMap: false,
  119. // css预设器配置项
  120. loaderOptions: {
  121. less: {
  122. // less 全局变量
  123. lessOptions: {
  124. globalVars: {
  125. hack: `true; @import '~@/assets/styles/variables.less';`
  126. },
  127. javascriptEnabled: true
  128. }
  129. }
  130. }
  131. // 启用 CSS modules for all css / pre-processor files.
  132. // modules: false,
  133. },
  134. // use thread-loader for babel & TS in production build
  135. // enabled by default if the machine has more than 1 cores
  136. parallel: require('os').cpus().length > 1,
  137. // 是否启用dll
  138. // See https://github.com/vuejs/vue-cli/blob/dev/docs/cli-service.md#dll-mode
  139. // dll: false,
  140. // PWA 插件相关配置
  141. // see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
  142. pwa: {},
  143. // webpack-dev-server 相关配置
  144. devServer: {
  145. /* 自动打开浏览器 */
  146. open: false,
  147. // host: "192.168.0.137",
  148. host: '0.0.0.0', //局域网和本地访问
  149. //host: "192.168.1.137",
  150. port: 8888,
  151. https: false,
  152. hotOnly: false,
  153. before: () => {}
  154. },
  155. // 第三方插件配置
  156. pluginOptions: {}
  157. };