打開 hbuilderx 的 HBuilderX.4.15.2024050802\HBuilderX\plugins\uniapp-cli 路徑
找到 HBuilderX.4.15.2024050802\HBuilderX\plugins\uniapp-cli\bin\uniapp-cli.js 文件夾📂一切都是從這裡開始的
找到上面文件,打個 log
發現我們的打印是在的,說明,沒找錯地方
然後順著代碼,發現執行了 service.run uni-build,那就看 run uni-build 是怎麼搞出來的,這是主線
// @vue/cli-service/lib/Service.js
const service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd())
service.run((process.env.NODE_ENV === 'development' && platform === 'h5') ? 'uni-serve' : 'uni-build',
args).catch(err => {
error(err)
process.exit(1)
})
new Service 的時候,引用了 node_modules@vue\cli-service 這個包,然後,這個包導出
也就是這個文件 @vue/cli-service/lib/Service.js
找到其中的 run
其中的 init 初始化了 uni-build 命令
打印看用了下面兩個包
除了上面帶 built-in 的,其他都是引用對應包的,那就引用了上面的這些包
實測是因為 @dcloudio/vue-cli-plugin-hbuilderx 這個包的配置不一樣導致新版本無法運行到 hbuilder 軟體上
更換兩個包,vue-cli-plugin-hbuilderx 和 vue-cli-plugin-uni
然後把這個報錯處理掉,發現不能檢測到文件更新,說明這兩個包裡的配置哪裡有問題
let time = uniStatisticsConfig.reportInterval;
發現這麼一行代碼,可能影響到了類型檢查
// 恢復 vue-loader 的 ts 檢查
tsLoaderOptions.transpileOnly = false
uni 的一些公共方法配置 uni-cli-shared
updateTsLoader 沒匹配上文件
對比配置,發現兩個版本的 updateTsLoader 給 ts loader 寫配置的邏輯不一樣,修改嘗試一下
嘗試整個 configure-webpack 文件都覆蓋,測試,編譯還是不通過
有可能是這個文件
vue-cli-plugin-builders
vue-cli-plugin-uni
這兩個包都覆蓋,可以正常編譯,但是到最後會有報錯
報錯在這裡,不知道為什麼
return reject(Build failed with errors.
)
原則,不改項目,只改 hbuilderx
實測,覆蓋兩個包之後,再修改這個文件的 error,即可解決此問題
1#
測試只替換 vue-cli-plugin-uni 是否能正常運行
再測試一下
webpack.nvue.conf.js 文件報錯,試著把 3216 的配置粘過來
vue-cli-plugin-hbuilderx/build/webpack.nvue.conf.js
最後編譯報錯,且無法熱更新
ERROR Build failed with errors.
2#
替換兩個包,不更改其他的內容
vue-cli-plugin-hbuilderx
vue-cli-plugin-uni
嘗試查看編譯結果
編譯報錯,打開錯誤信息可以看到
註釋掉這裡
再修改 uni 統計的報錯
能正常運行,此方案可行,無法運行新版本的問題就是這兩個包的問題,加上個 uni 統計和 webpack hasError 的異常