banner
飞天御剑流

飞天御剑流

前端,jAVAsCRIPT
github

uniapp 源碼調試

打開 hbuilderx 的 HBuilderX.4.15.2024050802\HBuilderX\plugins\uniapp-cli 路徑
找到 HBuilderX.4.15.2024050802\HBuilderX\plugins\uniapp-cli\bin\uniapp-cli.js 文件夾📂一切都是從這裡開始的
image
找到上面文件,打個 log
發現我們的打印是在的,說明,沒找錯地方
image
然後順著代碼,發現執行了 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 這個包,然後,這個包導出
image
也就是這個文件 @vue/cli-service/lib/Service.js
找到其中的 run
image
其中的 init 初始化了 uni-build 命令
打印看用了下面兩個包
image

除了上面帶 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 文件都覆蓋,測試,編譯還是不通過
有可能是這個文件
image

vue-cli-plugin-builders
vue-cli-plugin-uni
這兩個包都覆蓋,可以正常編譯,但是到最後會有報錯
報錯在這裡,不知道為什麼
return reject(Build failed with errors.)

原則,不改項目,只改 hbuilderx

實測,覆蓋兩個包之後,再修改這個文件的 error,即可解決此問題

image

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
嘗試查看編譯結果
編譯報錯,打開錯誤信息可以看到

image
註釋掉這裡

image
再修改 uni 統計的報錯

image

能正常運行,此方案可行,無法運行新版本的問題就是這兩個包的問題,加上個 uni 統計和 webpack hasError 的異常

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。