問題現象
electron build成功之後,執行安裝包報錯:
19:55:13.550] [error] Failed to initialize application: Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'electron-store' imported from C:\Program Files\kuaibotong\resources\app.asar\elecdist\main.js
Did you mean to import electron-store/index.js?
at new NodeError (node:internal/errors:387:5)
at packageResolve (node:internal/modules/esm/resolve:957:9)
at moduleResolve (node:internal/modules/esm/resolve:1006:20)
at defaultResolve (node:internal/modules/esm/resolve:1220:11)
at nextResolve (node:internal/modules/esm/loader:165:28)
at ESMLoader.resolve (node:internal/modules/esm/loader:844:30)
at ESMLoader.getModuleJob (node:internal/modules/esm/loader:431:18)
at ESMLoader.import (node:internal/modules/esm/loader:528:22)
at importModuleDynamically (node:internal/modules/cjs/loader:1072:29)
at importModuleDynamicallyWrapper (node:internal/vm/module:438:21)
但是本地執行electron .沒有問題。
問題分析
因為新增的功能中引入了electron-store模塊,開始猜測是因為他是原生模塊,需要rebuilding native。
後來看了store本身的package.json及依賴的conf庫,沒找到其他的非js依賴(可以看是不是有非.js之外的文件),沒有.node文件。
既然本地沒問題,那就是構建依賴有問題。(為什麼這麼説呢?)
我本地莫名用的是node的22版本,能跑起來我electron的22版本(他需要node16)。但是打包之後,electron的22版本就沒辦法支持需要 store11的22版本
問題定位
為什麼構建會出錯?
根本原因還是TMD小可愛的版本兼容的問題,我之前用的electron-store 是electron-store 11.x是ES模塊,要求Node.js >= 20,而我的Electron 22對應的Node.js版本是16.17.1,版本不匹配。
Electron版本對應關係 :Electron 22對應的Node.js版本是16.17.1,遠低於electron-store 11要求的Node.js 20+,這就是根本原因。
後期思路
升級Electron到33+版本(對應Node.js 20+),這樣就匹配上了。