无法在节点webkit应用程序中运行node.js模块mdns

时间:2014-07-24 13:07:02

标签: node.js bonjour node-webkit mdns gyp

我有一个节点webkit应用程序,它使用mdns模块从Mac(使用Mavericks)发布Bonjour服务。当我使用node server.js运行服务器代码时一切正常,但是当运行使用相同服务器代码的节点webkit应用程序时,我收到此错误:

"Uncaught Error: dlopen(/Users/me/myfolder/node_modules/mdns/build/Release/dns_sd_bindings.node, 1): no suitable image found.  Did find:
    /Users/me/myfolder/node_modules/mdns/build/Release/dns_sd_bindings.node: mach-o, but wrong architecture", source: /Users/me/myfolder/node_modules/mdns/lib/dns_sd.js (35)

显然当你为mdns安装npm模块时,它是为x86架构而构建的,我需要它用于i386,因为node-webkit是为i386构建的(我发现了通过阅读这个帖子:http://forums.macrumors.com/showthread.php?t=879780)。您可以通过在终端中运行它来验证它:

$ lipo -info /Applications/node-webkit.app/Contents/MacOS/node-webkit 
Non-fat file: /Applications/node-webkit.app/Contents/MacOS/node-webkit is architecture: i386

我发现这个链接建议了一个解决方案:https://github.com/rogerwang/node-webkit/issues/296用于另一个模块(节点代理)。建议的说明是:

I managed to build a 32-bit version of node-proxy as follows:
I installed nw-gyp 
I ran nw-gyp configure --target=0.3.6  
I edited the generated file nodeproxy.target.mk in the build directory by replacing -arch x86_64by -arch i386 
I ran nw-gyp build

但是因为我不习惯手动构建节点模块,所以按照说明我不清楚我应该在哪个文件夹中运行这些步骤(我假设它在模块中) node_modules内的文件夹: a)当我安装nw-gyp时,我没有得到全局使用的nw-gyp命令(我猜在指令中缺少-g选项) b)改为使用gyp configure --target=0.3.6给我一个错误,说明没有选项target c)我尝试跳过配置步骤(只是为了尝试),构建命令断开:

  

无法自动找到src目录。这是暂时的   Chromium功能将被删除。使用 - 深度作为解决方法。

但是当试图使用--depth(当然)它需要一个参数时,我无法找到放在那里的东西。

那么......我应该如何构建mdns模块以将其与node webkit一起使用? (无论是0.8.6版还是0.10.0版,我都可以适应)。

1 个答案:

答案 0 :(得分:4)

我设法让它发挥作用。

由于我已经安装了mdns模块,因此我已经在项目文件夹中的文件夹node_modules/mdns中获得了该模块的源代码。

所以这些是我为i386架构构建mdns模块所遵循的步骤:

1)通过运行npm install -g nw-gyp来安装nw-gyp 2)输入node-webkit项目的node_modules/mdns文件夹 3)运行nw-gyp configure --target=0.8.6(此目标是您已安装的node-webkit的版本)
4)最后运行nw-gyp build

我收到了很多关于已弃用功能的警告,但它已经构建好了,现在我的node-webkit应用程序可以成功发布Bonjour服务。

不幸的是,这不是最好的解决方案,因为安装项目的下一个人必须在常规npm install之后做同样的事情......但至少它是让它工作的东西。