Не могу запустить узел.модуль 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: а) когда я устанавливаю этот джип не сделать на СЗ-ГИП команду для использования во всем мире (я думаю параметром-G отсутствует в инструкции) b) использование вместо gyp configure --target=0.3.6 дает мне ошибку, говоря, что нет никакого варианта target c) я попытался пропустить шаг configure (просто чтобы попробовать), и команда build прерывается:

Не удалось автоматически найти каталог src. Это временно. Функция хрома, которая будет удалена. Использование -- глубина как обход.

Но когда я пытался использовать -- depth (конечно), это требует аргументации, я не мог найти, что туда положить.

Итак... как я должен построить модуль уведомления на использовании узла на базе webkit? (либо версия 0.8.6, либо 0.10.0, я могу адаптировать).

1 3

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... Но, по крайней мере, это хоть что-то, чтобы заставить его работать.