Я использую Electron-builder для упаковки моего приложения.
Версия : 22.4.0
Цель : nsis
Добавление пользовательского аддона grp c, написанного на C ++, приводит к сбою упакованного приложения. После того, как я запустил yarn dist
и установил приложение, используя результирующую программу установки, я попытался запустить приложение. Но экран становится белым (то есть он ничего не загружает), и примерно через 5 секунд приложение вылетает. Если я запускаю приложение с узла, используя yarn/npm start
, оно работает правильно, поэтому я не думаю, что проблема связана с самим аддоном, возможно, с моими настройками в package.json
; так как это то, что причиняло мне наибольшую боль до сих пор.
Мой пакет json файл:
{
"name": "XYXYXYX",
"version": "0.1.0",
"description": "",
"main": "app.js",
"nodeGypRebuild":"true",
"scripts": {
"start": "electron .",
"test": "echo \"Error: no test specified\" && exit 1",
"pack": "electron-builder --dir",
"dist": "electron-builder",
"postinstall": "electron-builder install-app-deps"
},
"build": {
"appId": "xfilter.optima",
"win": {
"target": "nsis"
},
"nsis": {
"oneClick": false,
"perMachine": true,
"allowElevation": true,
"runAfterFinish": false
}
},
"author": "XXXX",
"license": "SEE LICENSE IN LICENSE",
"devDependencies": {
"electron": "^8.0.0",
"electron-builder": "^22.4.0"
},
"dependencies": {
"electron-is-dev": "^1.1.0",
"is-unc-path": "^1.0.0",
"material-design-icons": "^3.0.1",
"materialize-css": "^1.0.0-rc.2",
"mongodb": "^3.5.2",
"node-addon-api": "*",
"sharp": "^0.24.1",
"typeface-roboto": "0.0.75"
}
}
Кроме того, интересно, что приложение, похоже, не взломало sh на require()
, скорее, когда я запускаю функцию, которую я экспортировал со своей стороны C ++.
Поверхность C ++ (на всякий случай):
#include <napi.h>
#include <ApiWorker.h>
using namespace Napi;
void runFilter(const CallbackInfo& info)
{
String panel_id = info[0].As<String>();
Function callback = info[1].As<Function>();
ApiWorker* _apiworker = new ApiWorker(panel_id, callback);
_apiworker->Queue();
}
Object Init(Env env, Object exports)
{
exports.Set(String::New(env, "runFilter"),
Function::New(env, runFilter));
return exports;
}
NODE_API_MODULE(NODE_GYP_MODULE_NAME, Init)
Я пытаюсь вызвать runFilter()
как
const filter = require('addon.node')
filter.runFilter("foobar", () => {console.log("Done");})
ApiWorker
- это AsyncWorker
(получено из Napi::AsyncWorker
)
PS: если я работаю в режиме разработки, то devtools cra sh ( см. приложение)