Я совершенно новичок в Node JS и Electron. Я пытаюсь интегрировать C ++ с HTML, используя Electron и Node JS. Я прошел несколько примеров, приведенных: GIT
Я пытаюсь вызвать нативную функцию (hello ()) из javascript моей веб-страницы, которая загружается электроном. я использовал node-gyp configure
создать мой файл решения Visual Studio. (.SLn). А позже я скомпилировал свой код с Visual Studio 2013 Express, который успешно сгенерировал мой .узел файл в папке build \ Release.
Это мой файл index.js:
var addon = require('./build/Release/hello.node');
console.log(addon.hello());
когда я просто запускаю это с node index.js
, это дает мне желаемый результат:
world
Но проблема возникает, когда я использую Электрон. Я использую бинарный электрон (32 бит), чтобы запустить мою веб-страницу.
Следующее мое main.js файл:
var app = require('app'); // Module to control application life.
var BrowserWindow = require('browser-window'); // Module to create native browser window.require('crash-reporter').start();
var mainWindow = null;
// Quit when all windows are closed.
app.on('window-all-closed', function() {
if (process.platform != 'darwin') {
app.quit();
}
});
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
app.on('ready', function() {
mainWindow = new BrowserWindow({width: 1366, height: 768});
mainWindow.loadUrl("file://" + __dirname + "/HtmlFile/index.html");
mainWindow.on('closed', function() {
mainWindow = null;
});
});
Теперь это мой javascript, где я вызываю нативный аддон:
//************* My Functional logic **************
//************************************************
var addon = require('../build/Release/hello');
alert(addon.hello());
Когда я запускаю это или загружаю эту страницу, я получаю следующую ошибку:
Uncaught Error: %1 is not a valid Win32 application. ATOM_SHELL_ASAR.js:137
C:\Users\Administrator\Desktop\MyAPP\build\Release\hello.node
Следующее мое package.json
:
{
"name": "MyAPP",
"version": "1.0.0",
"description": "Desc",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"},
"author": "",
"license": "ISC",
"dependencies": {
"nan": "^2.0.9"},
"gypfile": true
}
Это мое binding.gyp
:
{
"targets": [
{
"target_name": "hello",
"sources": [ "hello.cc" ],
"include_dirs": [
"<!(node -e \"require('nan')\")"]
}
]
}
Похоже, вы не правильно настроили двоичный файл. Извините, не уверен, что это будет работать для родного модуля, но вы можете попробовать восстановление…
Замечания: Пожалуйста, убедитесь, что у вас есть правильные аргументы для вашей команды node-gyp (если так вы будете перестраивать).
--target=<your electron version>
--target_platform=win32
(Не в примере ссылки, но вы, кажется, используете Windows)--arch=<your architecture>
(x64 = 64 бита, x86 = 32 бита)Как я уже упоминал в комментариях, я столкнулся с этой же проблемой. Чтобы решить эту проблему, вам нужно добавить пару дополнительных флагов:
node-gyp rebuild --target=<your electron version> --arch=<insert your arch> --dist-url=https://atom.io/download/atom-shell
Это позволит получить правильные требования с сайта atom.io и правильно построить надстройку. Для получения дополнительной информации вы можете проверить электронный специфичный документы на использование нативных модулей.
использование node-gyp напрямую создаст заголовки nodejs, но у электрона есть разные заголовки.
сначала вы должны выяснить, какую электронную версию использует электрон.
Вы можете написать JS, как это
console.log(process.version);
использовать электронный для выполнения этого скрипта, моя версия 0.36.1
и измените каталог на модуль, который вы хотите построить
#On Windows Try this
cd /path-to-module/
npm install bindings nan node-gyp
node-gyp rebuild --target=0.36.1 --arch=x64 --dist- url=https://atom.io/download/atom-shell
#notice the target version is the electron binary version
Моя личная проблема, касающаяся заголовков узлов и электронов в нативных аддонах, требовала другого значения параметра dist-url:
--dist-url=https://atom.io/download/electron
Надеюсь, это кому-нибудь поможет.
PS: до сих пор не могу понять, как установить его с помощью .npmrc в Windows (