У меня есть приложение node webkit, которое использует модуль mdns для публикации службы Bonjour с Mac (с Mavericks). Когда я запускаю код сервера с node server.js
, все работает нормально, но при запуске приложения node 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
: а) когда я устанавливаю nw- gyp Я не получаю команду nw-gyp для глобального использования (думаю, в инструкциях отсутствует опция -g) b) использование вместо нее gyp configure --target=0.3.6
выдает ошибку, говорящую об отсутствии опции target
c) я пытался пропустить настройку шаг (просто попробовать), и команда сборки прерывается:
Не удалось автоматически найти каталог src. Это временная функция Chromium, которая будет удалена. Используйте --depth в качестве обходного пути.
Но при попытке использовать --depth (конечно) требуется аргумент, я не мог понять, что туда вставить.
Итак... как мне создать модуль mdns для его использования с node webkit? (либо версия 0.8.6, либо версия 0.10.0, я могу адаптировать).