Не удается запустить модуль node.js mdns в приложении node webkit

У меня есть приложение 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, я могу адаптировать).


person Carla    schedule 24.07.2014    source источник


Ответы (1)


Мне удалось заставить его работать.

Поскольку я уже установил модуль mdns, у меня уже был исходный код модуля в папке node_modules/mdns внутри папки моего проекта.

Вот шаги, которые я выполнил, чтобы построить модуль mdns для архитектуры i386:

1) Установите nw-gyp, запустив: npm install -g nw-gyp
2) Войдите в папку node_modules/mdns вашего проекта node-webkit
3) Запустите nw-gyp configure --target=0.8.6 (эта цель — версия установленного вами node-webkit)
4) И, наконец, запустите nw-gyp build

Я получил много предупреждений об устаревших функциях, но он был собран нормально, и теперь мое приложение node-webkit может успешно опубликовать службу Bonjour.

К сожалению, это не лучшее решение, потому что следующий человек, который установит проект, должен будет сделать то же самое после обычного npm install... Но, по крайней мере, это что-то, чтобы заставить его работать.

person Carla    schedule 24.07.2014