![](/img/trans.png)
[英]Same Node.js version but gyp build uses different NODE_MODULE_VERSION
[英]rebuild nbind with `NODE_MODULE_VERSION 70.` instead of NODE_MODULE_VERSION 48
我有以下電子項目。 具有以下./src/index.js
(我的應用程序啟動的地方):
const { app, BrowserWindow, ipcMain } = require('electron');
const nbind = require('nbind');
const lib = nbind.init().lib;
const myPromice= new lib.MyPromice();
// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let mainWindow;
const createWindow = () => {
// Create the browser window.
mainWindow = new BrowserWindow();
mainWindow.setMenu(null);
mainWindow.maximize();
// and load the index.html of the app.
mainWindow.loadURL(`file://${__dirname}/ui/index.html`);
mainWindow.on('closed', () => {
mainWindow = null;
});
MyPromice.exec();
};
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow);
// Quit when all windows are closed.
app.on('window-all-closed', () => {
app.quit();
});
app.on('activate', () => {
createWindow();
});
我的package.json
是:
{
"name": "electron-cpp-bindings",
"version": "1.0.0",
"description": "A simple test using C++ bindings on an electron app",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "electron ./src/",
"autogypi": "autogypi",
"node-gyp": "HOME=~/.electron-gyp node-gyp --target=1.2.3 --arch=x64 --dist-url=https://electronjs.org/headers",
"emcc-path": "emcc-path",
"copyasm": "copyasm",
"ndts": "ndts",
"electron-version": "electron -v",
"rebuild": "HOME=~/.electron-gyp electron-rebuild --version=70 --module-dir build"
},
"author": "Dimitrios Desyllas",
"license": "MIT",
"devDependencies": {
"electron": "^5.0.8",
"electron-rebuild": "^1.8.5"
},
"dependencies": {
"autogypi": "^0.2.2",
"nbind": "^0.3.15",
"node-gyp": "^5.0.3"
}
}
我的綁定由這些文件組成:
src/cpp/promice.h
:
#ifndef PROMICE
#define PROMICE
class MyPromice {
public:
MyPromice(){};
~MyPromice(){};
void exec();
};
#endif
src/cpp/promice.cpp
#include"promice.h"
#include <iostream>
#include <thread>
#include <chrono>
void MyPromice::exec(){
std::this_thread::sleep_for(std::chrono::milliseconds(200));
std::cout << "Executing Code" << std::endl;
}
#include "nbind/nbind.h"
NBIND_CLASS(MyPromice) {
method(exec);
}
我嚴格按照以下 說明安裝要求,以便使用電子構建本機模塊:
# Electron's version.
export npm_config_target=1.2.3
# The architecture of Electron, see https://electronjs.org/docs/tutorial/support#supported-platforms
# for supported architectures.
export npm_config_arch=x64
export npm_config_target_arch=x64
# Download headers for Electron.
export npm_config_disturl=https://electronjs.org/headers
# Tell node-pre-gyp that we are building for Electron.
export npm_config_runtime=electron
# Tell node-pre-gyp to build module from source code.
export npm_config_build_from_source=true
# Install all dependencies, and store cache to ~/.electron-gyp.
HOME=~/.electron-gyp npm install
然后我運行:
./node_modules/.bin/electron-rebuild
這成功地構建了我的模塊:
✔ Rebuild Complete
此外,如果我運行以下命令序列:
npm run -- node-gyp \
configure build
我成功構建它:
> configure build
> electron-cpp-bindings@1.0.0 node-gyp /home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings
> HOME=~/.electron-gyp node-gyp --target=1.2.3 --arch=x64 --dist-url=https://electronjs.org/headers "configure" "build"
make: Entering directory '/home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/build'
COPY Release/obj.target/nbind/geni/symbols.txt
CXX(target) Release/obj.target/nbind/src/cpp/promice.o
CXX(target) Release/obj.target/nbind/node_modules/nbind/src/common.o
CXX(target) Release/obj.target/nbind/node_modules/nbind/src/reflect.o
CXX(target) Release/obj.target/nbind/node_modules/nbind/src/v8/Buffer.o
CXX(target) Release/obj.target/nbind/node_modules/nbind/src/v8/Binding.o
SOLINK_MODULE(target) Release/obj.target/nbind.node
COPY Release/nbind.node
make: Leaving directory '/home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/build'
但是當我通過npm start
啟動我的應用npm start
我收到以下錯誤:
> electron-cpp-bindings@1.0.0 start /home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings
> electron ./src/
App threw an error during load
Error: The module '/home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/build/Release/nbind.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 48. This version of Node.js requires
NODE_MODULE_VERSION 70. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
at process.func [as dlopen] (electron/js2c/asar.js:155:31)
at Object.Module._extensions..node (internal/modules/cjs/loader.js:881:18)
at Object.func [as .node] (electron/js2c/asar.js:155:31)
at Module.load (internal/modules/cjs/loader.js:701:32)
at tryModuleLoad (internal/modules/cjs/loader.js:633:12)
at Function.Module._load (internal/modules/cjs/loader.js:625:3)
at Module.require (internal/modules/cjs/loader.js:739:19)
at require (internal/modules/cjs/helpers.js:14:16)
at initNode (/home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/node_modules/nbind/dist/nbind.js:141:15)
at /home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/node_modules/nbind/dist/nbind.js:115:13
A JavaScript error occurred in the main process
Uncaught Exception:
Error: The module '/home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/build/Release/nbind.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 48. This version of Node.js requires
NODE_MODULE_VERSION 70. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
at process.func [as dlopen] (electron/js2c/asar.js:155:31)
at Object.Module._extensions..node (internal/modules/cjs/loader.js:881:18)
at Object.func [as .node] (electron/js2c/asar.js:155:31)
at Module.load (internal/modules/cjs/loader.js:701:32)
at tryModuleLoad (internal/modules/cjs/loader.js:633:12)
at Function.Module._load (internal/modules/cjs/loader.js:625:3)
at Module.require (internal/modules/cjs/loader.js:739:19)
at require (internal/modules/cjs/helpers.js:14:16)
at initNode (/home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/node_modules/nbind/dist/nbind.js:141:15)
at /home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/node_modules/nbind/dist/nbind.js:115:13
同樣為了解決我的問題,我還運行以下命令序列:
rm -rf ./node_mobules
npm install
在我的道路上沒有光。
所以我想知道為什么我為 nbind 配置了錯誤的標頭,以及如何解決這個問題?
我遇到過同樣的問題。 在嘗試了許多版本的代碼后,我發現了這一點:
在 JSON 文件中添加一個腳本(在您的情況下更改此行)
“重建”:“電子重建 -f -w node-gyp”
構建 C++ 文件
node-gyp configure build
npm run rebuild
現在運行電子
啟動
這是工作! 試試看。 我知道的不多,但我發現 node.js 和 node-gyp 運行不同版本的 node,因為它避免了沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.