Node.jsアプリケーションを作成し、それを配布したいとします。もちろん、ユーザーが簡単にできるようにしたいので、Node.jsをインストールし、npm install
を実行してから、手動でnode app.js
と入力しないようにします。
私が好むのは、単一の実行可能ファイルです。 Windows上の.exe
ファイル。
どうすればこれにアプローチできますか?
このスレッド を知っていますが、とにかくこれはWindowsについてのみです。プラットフォームに依存しない方法でこれをどのように達成できますか?何か案は?ベストプラクティス? ...?
完璧なソリューションは、ソースフォルダーを渡すことができる「コンパイラー」でした。ソースフォルダーには、さまざまな.js
ファイル内のアプリ自体、node_modules
フォルダー、およびpackage.json
などのメタデータが含まれています。出力は、Windows、OS X、Linuxなどのさまざまなプラットフォームのバイナリである必要があります。
ああ、何が重要なのか:ソースコードにany変更を加えたくないので、相対パスを使用したrequire
への呼び出しは、この相対パスは、パッケージ化されたアプリ内にあります。
何か案は?
PS:ユーザーにNode.jsを個別にインストールさせたくないので、実行可能ファイルにも含める必要があります。
その間、(私にとって)完璧なソリューションを見つけました: nexe 。これは、すべてのモジュールを含むNode.jsアプリケーションから単一の実行可能ファイルを作成します。
これは理想的なソリューションの次善策です。
まず、エンドユーザーがインストールや依存関係を気にすることなく「実行中」のアプリを用意すると便利なワークショップやデモなどにNode.jsアプリをパッケージ化することについて話します。
次のセットアップを試すことができます。
npm install
(package.jsonを介して)localnode_modulesディレクトリへのすべての依存関係。バイナリ依存関係の場合、個別にサポートする各プラットフォームでこの手順を実行することが重要です。which node
を使用してNode.jsバイナリの場所を見つけることができます。Windowsの場合:
自己解凍アーカイブの作成、 7Zip_extra は、解凍直後にコマンドを実行する方法をサポートしています。 http://www.msfnを参照してください。 org/board/topic/39048-how-to-make-a-7-Zip-switchless-installer / 。
OS X/Linuxの場合:
makeself または unzipsfx などのツールを使用できます(これがデフォルトで定義されたCHEAP_SFX_AUTORUNでコンパイルされているかどうかわかりません)。
これらのツールは、アーカイブを一時ディレクトリに抽出し、指定されたコマンド(node app.js
など)を実行し、終了したらすべてのファイルを削除します。
死んだ馬を打ち負かすのではなく、あなたが説明している解決策は Node-Webkit によく似ています。
Gitページから:
node-webkitは、Chromiumとnode.jsに基づくアプリランタイムです。 node-webkitを使用して、ネイティブアプリをHTMLおよびJavaScriptで記述できます。また、Node.jsモジュールをDOMから直接呼び出すことができ、すべてのWebテクノロジーを使用してネイティブアプリケーションを記述する新しい方法が可能になります。
これらの手順 ユーザーが実行できる単一ファイルアプリの作成の詳細、および この部分 は外部依存関係について説明しています。
正確な解決策かどうかはわかりませんが、かなり近いようです。
それが役に立てば幸い!
JXcoreを使用すると、Windows、Linux、またはMac OS Xで、nodejsアプリケーションをすべての依存関係を含む単一の実行可能ファイルに変換できます。
インストーラーへのリンクは次のとおりです。 https://github.com/jxcore/jxcore-release
そして、ここに設定方法へのリンクがあります: http://jxcore.com/turn-node-applications-into-executables/
使い方はとても簡単で、Windows 8.1とUbuntu 14.04の両方でテストしました。
参考までに、JXcoreはNodeJSのフォークなので、100%NodeJSと互換性があり、いくつかの追加機能があります。
Nexeに加えて、 browserify を使用して、すべての依存関係を単一の.js
ファイルとしてバンドルできます。これは、実際のノード実行可能ファイルをバンドルせず、javascript側を処理するだけです。ネイティブモジュールも処理しません。純粋なノードコンパイルのコマンドラインオプションはbrowserify --output bundle.js --bare --dg false input.js
です。
インストーラーを作成するには、いくつかの手順を実行する必要があり、オペレーティングシステムごとに異なります。例えば:
.pkg
を作成する必要があります。これを行う方法については、こちらをご覧ください。 https://coolaj86.com/articles/how-to-create-an-osx-pkg-installer.html.deb
を作成する必要があります。それを行う方法についての指示がここにあります。 https://coolaj86.com/articles/how-to-create-a-debian-installer.html.exe
または.msi
を作成する必要があります。ここでinnosetupインストーラーを使用してその方法を説明します。 https://coolaj86.com/articles/how-to-create-an-innosetup-installer .htmlMakeselfを使用してみましたが成功しました。まだ問題はありません。文書化された手順@ https://www.linkedin.com/Pulse/article/deploying-nodejs-single-executableruntime-amit-gupta
Gitリポジトリを作成し、依存関係としてノードgitリポジトリへのリンクを設定できます。その後、レポを複製するユーザーもノードをインストールできます。
#git submodule [--quiet] add [-b branch] [-f|--force]
git submodule add /var/Node-repo.git common
スクリプトを簡単にパッケージ化して、どこかにホストしているgitリポジトリを自動的に複製し、その1つのスクリプトファイルから「インストール」できます。
#!/bin/sh
#clone git repo
git clone your-repo.git