Nodejs(同步)找不到纤程二进制文件
Nodejs (Sync) cannot find fibers binaries
我见过类似的问题,但还没有真正适合我的解决方案(大多数用户只是重新安装光纤或流星(我没有使用流星))。
我已将 nodejs 模块 Sync 添加到我的 nodejs 0.12.6 项目中。它的依赖项是随 Sync 自动安装的 Fibers 模块。现在我想通过 require 加载 Sync,但失败并显示消息
... /win32-x64-v8-4.3/fibers.node not found
而且是正确的:在 sync/node_modules/fibers/bin/ 中没有名为 win32-x64-v8-4.3 的目录, 只有 win32-x64-v8- 4.2 和重命名没有解决问题(本来就太容易了)...
- 我该如何解决这个问题?这怎么会发生?
- 最后一个数字(4.3)是什么意思?我猜是 windows, 64bit, Javascript v8 引擎,然后呢?纤维版本?
有什么想法或提示吗?
更新:
- 我尝试将节点升级到 0.12.6,但没有任何改变。
- 我知道4.3是什么意思了,是v8版本。好吧,当 运行 我的电子应用程序时,它是 v8: '4.3.61.21'。用node查看版本,是3.28。所以它可能是电子 "fault"?
更新#2:
- 好的,我发现电子是基于 io.js 而不是节点。这解释了不同的 v8 版本。但仍然没有解决办法。使用最新 io.js (2.3.3) 安装光纤时,它会测试 4.2 二进制文件,但电子需要 4.3 :(
更新#3:
- 即使使用与 electron 相同的 io.js 版本 2.3.1,它也只安装 4.2 二进制文件。
更新#4:
- 现在,我已经尝试了 http://electron.atom.io/docs/v0.27.0/tutorial/using-native-node-modules/ 中描述的所有三种方法(使用 electron 版本 0.29.1)- 仍然没有解决方案。 v8-4.3 没有任何二进制文件,仍然只有 v8-4.2 的二进制文件。 :(
解法:
- 请看下面我的回答。 :)
您需要使用 electron-rebuild 工具根据您正在使用的 Electron 版本重建您的原生模块
最后,我不得不自己编译纤程。如更新 #4 中所述,我之前已经尝试过。但是 node-gyp 总是失败,我没有注意到我必须自己 link 到新的二进制文件...
cd ~/my-project-root/
npm install sync
cd ./node_modules/sync/node_modules/fibers
node-gyp configure
HOME=~/.electron-gyp node-gyp rebuild --target=0.29.1 --arch=x64 --dist-url=https://atom.io/download/atom-shell
然后我创建了丢失的目录并将新的二进制文件移到那里:
mkdir bin/win32-x64-v8-4.3
mv build/Release/fibers.node bin/win32-x64-v8-4.3/fibers.node
现在 Sync 非常有用。
我见过类似的问题,但还没有真正适合我的解决方案(大多数用户只是重新安装光纤或流星(我没有使用流星))。
我已将 nodejs 模块 Sync 添加到我的 nodejs 0.12.6 项目中。它的依赖项是随 Sync 自动安装的 Fibers 模块。现在我想通过 require 加载 Sync,但失败并显示消息
... /win32-x64-v8-4.3/fibers.node not found
而且是正确的:在 sync/node_modules/fibers/bin/ 中没有名为 win32-x64-v8-4.3 的目录, 只有 win32-x64-v8- 4.2 和重命名没有解决问题(本来就太容易了)...
- 我该如何解决这个问题?这怎么会发生?
- 最后一个数字(4.3)是什么意思?我猜是 windows, 64bit, Javascript v8 引擎,然后呢?纤维版本?
有什么想法或提示吗?
更新:
- 我尝试将节点升级到 0.12.6,但没有任何改变。
- 我知道4.3是什么意思了,是v8版本。好吧,当 运行 我的电子应用程序时,它是 v8: '4.3.61.21'。用node查看版本,是3.28。所以它可能是电子 "fault"?
更新#2:
- 好的,我发现电子是基于 io.js 而不是节点。这解释了不同的 v8 版本。但仍然没有解决办法。使用最新 io.js (2.3.3) 安装光纤时,它会测试 4.2 二进制文件,但电子需要 4.3 :(
更新#3:
- 即使使用与 electron 相同的 io.js 版本 2.3.1,它也只安装 4.2 二进制文件。
更新#4:
- 现在,我已经尝试了 http://electron.atom.io/docs/v0.27.0/tutorial/using-native-node-modules/ 中描述的所有三种方法(使用 electron 版本 0.29.1)- 仍然没有解决方案。 v8-4.3 没有任何二进制文件,仍然只有 v8-4.2 的二进制文件。 :(
解法:
- 请看下面我的回答。 :)
您需要使用 electron-rebuild 工具根据您正在使用的 Electron 版本重建您的原生模块
最后,我不得不自己编译纤程。如更新 #4 中所述,我之前已经尝试过。但是 node-gyp 总是失败,我没有注意到我必须自己 link 到新的二进制文件...
cd ~/my-project-root/
npm install sync
cd ./node_modules/sync/node_modules/fibers
node-gyp configure
HOME=~/.electron-gyp node-gyp rebuild --target=0.29.1 --arch=x64 --dist-url=https://atom.io/download/atom-shell
然后我创建了丢失的目录并将新的二进制文件移到那里:
mkdir bin/win32-x64-v8-4.3
mv build/Release/fibers.node bin/win32-x64-v8-4.3/fibers.node
现在 Sync 非常有用。