Посмотрим правде в глаза: если вы пишете программное обеспечение, его часто трудно распространять: у вас есть среда выполнения, модули, от которых вы зависите, и само ваше программное обеспечение. Конечно, вы можете упаковать все, кроме пакетов, требующих, чтобы у вас были права root для установки.
Поэтому иногда удобно иметь один файл / бинарный дистрибутив. Загрузите исполняемый файл и запустите его. Для проекта ruby вы можете конвертировать вещи в одну банку, используя Jruby. Хорошим примером является проект logstash : скачайте 1 файл, запустите его, и вы в деле. Но вам все равно потребуется установить среду выполнения Java. (спасибо Apple, НЕ).
Это дополнительный язык GO, но я искал похожую вещь для nodejs . И следующая документация является самой близкой, которую я мог это получить: (это работает!)
Компилирование простого JavaScript (без внешних модулей)
Введите nexe инструмент для компиляции проектов nodejs в исполняемый двоичный файл.
Как это работает: — он загружает nodejs источник вашего выбора — это создает единый файл nodejs источник ( с помощью сардины ) — это обезьяна патчи nodejs код , чтобы включить этот единственный файл в двоичном (добавление его к Lib / NEXE каталог .js)
Создать двоичный файл так же просто, как:
$ nexe -i myproject.js -o myproject.bin -r 0.10.3
Предостережения:
- У меня была проблема с конвертированными символами Юникода: он использует uglify.js, и его необходимо настроить, чтобы оставить их в одиночестве. Sardines Patch Unichode . Это было необходимо, чтобы получить файл Terminal.js для компиляции
- Следующая проблема состояла в том, чтобы заставить socket.io-клиент компилироваться: у swfobject есть объекты документа и навигатора, так что это тоже нужно было исправить — Sardines Patch Document & Navigator
Альтернативы:
- Node-webkit для упаковки приложений nodejs, которые требуют взаимодействия с пользовательским интерфейсом
- http://tidesdk.multipart.net/docs/user-dev/generated/ — похоже, но не смог понять
- AppJS — http://appjs.org/#why — нацелен на создание собственных приложений HTML5 / Javascript
- NPKG — https://github.com/wearefractal/npkg — старый, но интересный код
Встраивание нативного модуля (в двоичном файле nodejs)
Многие из этих единичных упаковочных инструментов страдают от проблемы с ручными модулями.
nexe не поддерживает нативные модули (пока).
Но с небольшой настойчивостью и творческим подходом это то, что я сделал, чтобы добавить собственный модуль pty.js непосредственно в двоичный файл nodejs.
$ tar -xzvf node-v0.8.21.tar.gz $ cd node-v0.8.21 # Copy the native code in the src directory # If there is a header file copy/adapt it too $ cp ~/dev/terminal.js/node_modules/pty.js/src/unix/pty.cc src/node_pty.cc # Correct the export name of the module # Add the node_ prefix to the node_module name # Last line should read - NODE_MODULE(node_pty, init) # add node_pty to src/node_extensions.h (f.e. right after node_zlib) # NODE_EXT_LIST_ITEM(node_pty) # Copy the pty.js file $ cp ~/dev/pty.js/lib/pty.js lib/pty.js # Add the pty.js to the node.gyp # Somewhere in the library list add pty.js # Somewhere in the source list add node_pty.cc # Adapt the namings/bindings in lib/pty.js # 1) replace: var pty = require('../build/Release/pty.node'); # with: var binding = process.binding('pty'); # 2) replace all references to pty. to binding. $ make clean $ ./configure $ make
Теперь у вас есть собственный узел сборки в out / Release / node. Размер файла был около 10034856, вы можете дополнительно удалить его и 6971192 (6.6M)
Теперь вам нужно удалить нативную зависимость из вашего package.json перед тем, как вы ее создадите.
Упаковка файла
Единственный двоичный файл теперь позволяет легко сделать из него установщик curl, поскольку он требует только загрузки файла. Помните предостережение об этом.
И вы все еще можете упаковать это:
- создайте из него пакет rpm, deb и т. д., используя fpm
- или создайте из него нативный .app-файл MacOSX, как предлагает Матиас Биненс в http://mathiasbynens.be/notes/shell-script-mac-apps
- https://github.com/subtleGradient/Appify-UI
- http://blog.coolaj86.com/articles/how-to-create-an-osx-pkg-installer.html
- построить DMG — http://www.recital.com/index.php?option=com_content&view=article&id=108%3Ahowto-build-a-dmg-file-from-the-command-line-on-mac-os- х & Itemid = 59
Дополнительно
Рант о том, почему это хорошая или плохая идея — безопасный дистрибутив Nodejs
Больше информации о процессе.
- http://blog.carbonfive.com/2011/03/14/node-js-part-ii-spelunking-in-the-code/
- https://groups.google.com/forum/?fromgroups#!topic/nodejs/R5fDzBr0eEk
Конвертируйте проекты nodejs в один файл / формат:
- Npk — https://github.com/cfsghost/npk
- UglifyJS — https://github.com/mishoo/UglifyJS/
- RequireJS — http://requirejs.org/
- Browserify — http://browserify.org/
- OneJS — https://github.com/azer/onejs
Кросс-компиляция: