Не могу запустить узел.модуль 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 прерывается:
Но когда я пытался использовать -- depth (конечно), это требует аргументации, я не мог найти, что туда положить.Не удалось автоматически найти каталог src. Это временно. Функция хрома, которая будет удалена. Использование -- глубина как обход.
Итак... как я должен построить модуль уведомления на использовании узла на базе webkit? (либо версия 0.8.6, либо 0.10.0, я могу адаптировать).
1 ответ:
Мне удалось заставить его работать.
Поскольку я уже установил модуль
mdns
, у меня уже был исходный код модуля в папкеnode_modules/mdns
в папке моего проекта.Итак, вот шаги, которым я следовал, чтобы построить модуль
1) Установите nw-gyp, запустив:mdns
для архитектуры i386: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
... Но, по крайней мере, это хоть что-то, чтобы заставить его работать.