web-dev-qa-db-ja.com

Node.jsアプリケーションを単一の実行可能ファイルとしてデプロイするにはどうすればよいですか?

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を個別にインストールさせたくないので、実行可能ファイルにも含める必要があります。

129
Golo Roden

その間、(私にとって)完璧なソリューションを見つけました: nexe 。これは、すべてのモジュールを含むNode.jsアプリケーションから単一の実行可能ファイルを作成します。

これは理想的なソリューションの次善策です。

56
Golo Roden

まず、エンドユーザーがインストールや依存関係を気にすることなく「実行中」のアプリを用意すると便利なワークショップやデモなどにNode.jsアプリをパッケージ化することについて話します。

次のセットアップを試すことができます。

  1. アプリのソースコードを入手する
  2. npm install(package.jsonを介して)localnode_modulesディレクトリへのすべての依存関係。バイナリ依存関係の場合、個別にサポートする各プラットフォームでこの手順を実行することが重要です。
  3. Node.jsバイナリをコピーします-Windowsの場合はnode.exe、OSの場合は(おそらく)/ usr/local/bin/node X/Linuxをプロジェクトのルートフォルダーに。 OS X/Linuxでは、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など)を実行し、終了したらすべてのファイルを削除します。

31
Frederic

死んだ馬を打ち負かすのではなく、あなたが説明している解決策は Node-Webkit によく似ています。

Gitページから:

node-webkitは、Chromiumとnode.jsに基づくアプリランタイムです。 node-webkitを使用して、ネイティブアプリをHTMLおよびJavaScriptで記述できます。また、Node.jsモジュールをDOMから直接呼び出すことができ、すべてのWebテクノロジーを使用してネイティブアプリケーションを記述する新しい方法が可能になります。

これらの手順 ユーザーが実行できる単一ファイルアプリの作成の詳細、および この部分 は外部依存関係について説明しています。

正確な解決策かどうかはわかりませんが、かなり近いようです。

それが役に立てば幸い!

15
Jason Nichols

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と互換性があり、いくつかの追加機能があります。

8
Ian Tait

Nexeに加えて、 browserify を使用して、すべての依存関係を単一の.jsファイルとしてバンドルできます。これは、実際のノード実行可能ファイルをバンドルせず、javascript側を処理するだけです。ネイティブモジュールも処理しません。純粋なノードコンパイルのコマンドラインオプションはbrowserify --output bundle.js --bare --dg false input.jsです。

6
Nakedible

インストーラーを作成するには、いくつかの手順を実行する必要があり、オペレーティングシステムごとに異なります。例えば:

5
CoolAJ86

Makeselfを使用してみましたが成功しました。まだ問題はありません。文書化された手順@ https://www.linkedin.com/Pulse/article/deploying-nodejs-single-executableruntime-amit-gupta

1
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
0
HarrisonJackson