浏览代码

再次处理升级:统一升级到 webpack5 版本上, vue.config.js配置 webpack5 兼容性

shizhongqi 1 年之前
父节点
当前提交
c9228be96f
共有 2 个文件被更改,包括 61 次插入10 次删除
  1. 15 8
      hdApp/package.json
  2. 46 2
      hdApp/vue.config.js

+ 15 - 8
hdApp/package.json

@@ -20,7 +20,7 @@
     "dev:mp-baidu": "cross-env NODE_ENV=development UNI_PLATFORM=mp-baidu vue-cli-service uni-build --watch",
     "dev:mp-qq": "cross-env NODE_ENV=development UNI_PLATFORM=mp-qq vue-cli-service uni-build --watch",
     "dev:mp-toutiao": "cross-env NODE_ENV=development UNI_PLATFORM=mp-toutiao vue-cli-service uni-build --watch",
-    "dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch --minimize",
+    "dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch",
     "info": "node node_modules/@dcloudio/vue-cli-plugin-uni/commands/info.js"
   },
   "dependencies": {
@@ -45,19 +45,25 @@
     "@dcloudio/uni-stacktracey": "2.0.2-4060620250520001",
     "@dcloudio/uni-stat": "2.0.2-4060620250520001",
     "@vue/shared": "3.5.17",
+    "assert": "^2.0.0",
     "autoprefixer": "^8.0.0",
+    "buffer": "^6.0.3",
+    "crypto-browserify": "^3.12.0",
     "echarts": "4.2.1",
     "flyio": "0.6.14",
     "js-base64": "^2.5.1",
     "jweixin-module": "^1.4.1",
     "lodash": "^4.17.20",
-    "postcss": "^7.0.0",
-    "postcss-import": "^12.0.1",
+    "path-browserify": "^1.0.1",
+    "process": "^0.11.10",
+    "querystring-es3": "^0.2.1",
     "regenerator-runtime": "^0.12.1",
-    "svgo": "^4.0.0",
+    "stream-browserify": "^3.0.0",
     "text-encoding": "^0.7.0",
     "timers-browserify": "^2.0.12",
     "to-array-buffer": "^3.2.0",
+    "url": "^0.11.0",
+    "util": "^0.12.5",
     "vue": "^2.6.10",
     "vue-lazyload": "^1.3.3",
     "vuex": "3.6.2"
@@ -79,7 +85,6 @@
     "@vue/cli-plugin-babel": "^5.0.0",
     "@vue/cli-service": "^5.0.0",
     "babel-plugin-import": "1.13.8",
-    "cache-loader": "^4.1.0",
     "copy-webpack-plugin": "^13.0.0",
     "cross-env": "7.0.3",
     "jest": "25.5.4",
@@ -91,13 +96,15 @@
     "postcss-import": "^12.0.1",
     "postcss-loader": "~3.0.0",
     "qs": "^6.8.0",
+    "svgo": "^4.0.0",
     "sass": "1.32.13",
     "sass-migrator": "^1.7.3",
-    "vue-template-compiler": "^2.6.10"
+    "vue-template-compiler": "^2.6.10",
+    "webpack": "^5.0.0"
   },
   "browserslist": [
-    "Android >= 4",
-    "ios >= 8"
+    "Android >= 9",
+    "ios >= 12"
   ],
   "uni-app": {
     "scripts": {}

+ 46 - 2
hdApp/vue.config.js

@@ -2,8 +2,52 @@ module.exports = {
     configureWebpack: {
         resolve: {
             fallback: {
-                timers: require.resolve('timers-browserify')
+                timers: require.resolve('timers-browserify'),
+                // webpack 5 需要的 Node.js polyfills
+                path: require.resolve('path-browserify'),
+                crypto: require.resolve('crypto-browserify'),
+                fs: false,
+                stream: require.resolve('stream-browserify'),
+                buffer: require.resolve('buffer'),
+                util: require.resolve('util'),
+                assert: require.resolve('assert'),
+                url: require.resolve('url'),
+                querystring: require.resolve('querystring-es3')
             }
-        }
+        },
+        plugins: [
+            // 为 webpack 5 提供 Buffer polyfill
+            new (require('webpack')).ProvidePlugin({
+                Buffer: ['buffer', 'Buffer'],
+                process: 'process/browser'
+            })
+        ],
+        // 忽略一些不需要的模块
+        ignoreWarnings: [
+            {
+                module: /node_modules/,
+                message: /Can't resolve/
+            }
+        ]
+    },
+    chainWebpack: config => {
+        // 修复可能的 url-loader 配置问题
+        const staticTypes = ['images', 'media', 'fonts']
+        staticTypes.forEach(staticType => {
+            if (config.module.rules.has(staticType)) {
+                config.module.rule(staticType).uses.clear()
+                config.module
+                    .rule(staticType)
+                    .type('asset')
+                    .set('generator', {
+                        filename: `static/${staticType}/[name].[hash:8][ext]`
+                    })
+                    .set('parser', {
+                        dataUrlCondition: {
+                            maxSize: 4096
+                        }
+                    })
+            }
+        })
     }
 }