次のように実行したノードアプリを作成しました。
node.exe app.js inputArg
これを単独で.exeにパッケージ化する方法はありますか?だから私はこのようなことをすることができますか?
App.exe inputArg
私はバッチファイルを使用してこれを偽造する方法がありますので、これを行うことができます:
App.bat inputArg
しかし、これには、そのフォルダーにすべての依存関係とノードがあることが必要です。これは理想的ではありません。
無料と商用の両方のいくつかの選択肢があります。私はそれらのいずれも使用していませんが、理論的には動作するはずです:
ほとんどの場合、バッチファイルをメインの実行可能ファイルとして保持し、node.exeとスクリプトをバンドルする必要があります。
スクリプトによっては、 JSDB にポートするオプションもあります。これは、リソースを単に追加するだけで 実行可能ファイルを作成する簡単な方法 をサポートします。
3番目の準解決策は、C:\utils
のようなノードを保持し、このフォルダーをPATH
環境変数に追加することです。次に、そのディレクトリに.batファイルを作成して、node +希望のスクリプトを実行します。coffeescriptのcoffee
がこの方法でWindowsで動作するようになりました。このセットアップは、バッチファイル、vbスクリプト、またはインストーラーで自動化できます。
私が使用したソリューションは、Roger Wangの node-webkit です。
これは、nodejsアプリをパッケージ化して配布する素晴らしい方法であり、アプリ全体を単一の実行可能ファイルとして「バンドル」するオプションも提供します。 Windows、Mac、Linuxをサポートしています。
ここ node-webkitアプリをデプロイするためのさまざまなオプションに関するドキュメントがありますが、簡単に言うと、次のことを実行します。
追加のメモとして-私はこれを使用していくつかのプロダクションボックス/インストールCDアプリケーションを出荷しました、そしてそれはうまくいきました。同じアプリがWindows、Mac、Linux、およびWeb上で実行されます。
この質問に出くわした人のために、ノードプロジェクトからexeを作成する2つのプロジェクト Pkg および Electron.atom.io がありますが、それらはわずかに異なります。
デフォルトでは、Windowsは.js
ファイルをMicrosoftのスタンドアロンJSランタイムエンジンである Windows Script Host に関連付けます。コマンドプロンプトでscript.jsと入力する(またはエクスプローラーで.js
ファイルをダブルクリックする)と、スクリプトはwscript.exe
によって実行されます。
これは グローバル設定でローカルの問題を解決する かもしれませんが、 associate.js
の代わりにnode.exe
を使用して、scriptと入力することもできます。コマンドでのjsプロンプトまたはスクリプト上でアイテムをダブルクリック/ドラッグすると、Nodeでアイテムが起動します。
もちろん、私のように.js
ファイルをエディターに関連付けて、ダブルクリックしてお気に入りのテキストエディターを開く場合、この提案はあまり役に立ちません。 右クリックメニューエントリを追加 of "Node with Execute"を.js
ファイルに追加することもできますが、この方法ではコマンドラインのニーズを解決できません。
最も簡単な解決策は、おそらくバッチファイルを使用することです。スクリプトが存在するフォルダーにNodeのコピーを保持する必要はありません。単にNode実行可能ファイルを参照するだけです。
"C:\Program Files (x86)\nodejs\node.exe" app.js %*
別の選択肢は、実行するスクリプトとして独自のファイル名+ .js
を使用してNodeを起動し、コマンドライン引数を渡す非常に単純なC#アプリです。
class Program
{
static void Main(string[] args)
{
var info = System.Diagnostics.Process.GetCurrentProcess();
var proc = new System.Diagnostics.ProcessStartInfo(@"C:\Program Files (x86)\nodejs\node.exe", "\"" + info.ProcessName + ".js\" " + String.Join(" ", args));
proc.UseShellExecute = false;
System.Diagnostics.Process.Start(proc);
}
}
結果のEXEに「app.exe」という名前を付けると、app arg1 ...
と入力でき、Nodeがコマンドライン"app.js" arg1 ...
で開始されます。 C#ブートストラップアプリはすぐに終了し、Nodeがコンソールウィンドウを担当することに注意してください。
これはおそらく比較的幅広い関心があるので、先に進み、これを作成しました- GitHubで利用可能 。これには コンパイル済みexe も含まれます。
私が知っている最良のツールはNodeJSツールです: zeit/pkg
非常に使いやすい(例としてNexeよりもはるかに優れています)、グローバルにインストールすることができます:npm install -g pkg
macOS、Linux、およびWindows用の実行可能ファイルを作成するには:
pkg exampleApp.js
NodeJSソケットサーバーを使用する複雑なコードが少しありました。さまざまなアプリケーションを試しましたが、zeit/pkgを除き、どれも適切に作成しませんでした。
試したことはありませんが、nexeはnexeがこれを実行できるようです。
この質問に答えられてから、別のソリューションが開始されました。
https://github.com/appjs/appjs
この記事の執筆時点では、これは実行可能ファイルにコンパイルされたクロムパッケージを削除してnode.jsアプリをパッケージ化するための最終的なソリューションです。
編集:AppJSはもはやアクティブではありませんが、それ自体はdeskshellと呼ばれるフォークを示唆しています。
ここには多くの良い答えがありますが、それらは JXcore ほど単純ではありません。
WindowsにJXcoreをインストールしたら、次のコマンドを実行するだけです。
jx package app.js "myAppName" -native
これにより、配布できる外部の依存関係なしに実行できる.exeファイルが生成されます(システムにJXcoreもNode.jsも必要ありません)。
その機能に関するドキュメントは次のとおりです。 http://jxcore.com/packaging-code-protection/#cat-74
2018年編集
そのプロジェクトは現在は死んでいますが、まだここでホストされています: https://github.com/jxcore/jxcore-release (ありがとう@Elmue)
disclose
を試してください: https://github.com/pmq20/disclose
disclose
は、次の特性を備えたNode.jsプロジェクトおよびNode.jsインタープリターから、基本的に自己解凍型exeを作成します。
node-compiler
を試してください: https://github.com/pmq20/node-compiler
Node.jsプロジェクトを1つの実行可能ファイルにコンパイルするために、node-compiler
という新しいプロジェクトを作成しました。
ソースコードは標準のNode.jsライブラリと同様にNode.jsインタープリターと一緒にコンパイルされるため、disclose
よりも優れています。
さらに、ファイルおよびディレクトリの要求を、実行時にファイルシステムではなくメモリに透過的にリダイレクトします。そのため、コンパイルされた製品を実行するのにソースコードは必要ありません。
同様のプロジェクトと比較して、
pkg( https://github.com/zeit/pkg ):パッケージ内ファイルにアクセスするためにPkgがfs。* APIを動的にハッキングしたのに対し、Node.jsコンパイラーはそれらをそのままにして動作しますlibsquashによるより深いレベル。 PkgはJSONを使用してパッケージ内ファイルを保存しますが、Node.jsコンパイラーはより高度で広く使用されているSquashFSをデータ構造として使用します。
EncloseJS( http://enclosejs.com/ ):EncloseJSは、パッケージ内ファイルへのアクセスを5つのfs。* APIのみに制限しますが、Node.jsコンパイラはすべてのfs。* APIをサポートします。 EncloseJSはプロプライエタリライセンスであり、使用するとNode.jsコンパイラがMITライセンスを取得し、ユーザーが自由に使用および変更できます。
Nexe( https://github.com/nexe/nexe ):Nexeはbrowserifyを使用しているため、動的なrequireをサポートしませんが、Node.jsコンパイラはrequire.resolveを含むすべての種類のrequireをサポートします。
asar( https://github.com/electron/asar ):AsarはJSONを使用してファイル情報を保存し、Node.jsコンパイラーはSquashFSを使用します。 Asarはコードアーカイブと実行可能ファイルを別々に保持し、Node.jsコンパイラーはすべてのJavaScriptソースコードをNode.js仮想マシンとリンクし、単一の実行可能ファイルを最終製品として生成します。
AppImage( http://appimage.org/ ):AppImageはSquashFSをサポートするカーネルを備えたLinuxのみをサポートしますが、Node.jsコンパイラーはLinux、macOS、Windowsの3つのプラットフォームすべてをサポートしますが、特別なものはありませんカーネルの機能要件。
そのためにBoxedAppをお勧めします。これは非常にうまく機能する商用製品です。 NodeJSアプリで動作します。エンドユーザーは、アプリ用のEXEファイルを1つだけ取得します。インストールの必要はありません。
たとえば、Electronでは、エンドユーザーがアプリをインストール/解凍する必要があり、コードのすべてのソースファイルが表示されます。
BoxedApp NodeJSアプリが必要とするすべてのファイルと依存関係をパッケージ化します。圧縮をサポートし、コンパイルされたファイルはWindows XP +で動作します
使用する場合は、コンパイル済みアプリにNode.EXEを追加してください。 Windowsをサポートするノードバージョンを選択しますXP(必要な場合)
プログラムはコマンドライン引数をサポートしているので、パッケージ後には次のことができます
c:\myApp argument1
また、ノードコードで引数を取得できます。
process.argv[1]
アプリにはファイルの依存関係がある場合があるため、BoxedAppでは、フォルダーとファイルを依存関係として追加できます。たとえば、設定ファイルを挿入できます。
var mySettings=require('fs').readFileSync('./settings.jgon').toString()
詳細:
注意点:通常、私はオープンソース/フリーソフトウェアについて推奨していますが、この場合、仕事を成し遂げる何かが見つかりませんでした。
これらのソリューションのいずれかが要件を満たしていることがわかったため、これを行うnode2exeと呼ばれる独自のバージョンのノードを作成しました。 https://github.com/areve/node2exe から入手できます
私は数日間このトピックを調査してきましたが、ここに私が見つけたものがあります。オプションは2つのカテゴリに分類されます。
デスクトップアプリを構築する場合の最適なオプションは次のとおりです:
1- NW.js :すべてのNode.jsモジュールをDOMから直接呼び出すことができ、すべてのWebテクノロジーを使用してアプリケーションを作成する新しい方法を有効にします。
2- 電子 :JavaScript、HTML、およびCSSを使用してクロスプラットフォームのデスクトップアプリを構築する
以下に、それらの適切な比較を示します。 NW.jsとElectron Compared 。 NW.jsの方が優れていると思うし、JSファイルをコンパイルするアプリケーションも提供しています。 Enigma Virtual Box のようなスタンドアロンの実行可能ファイルとインストーラービルダーもあります。どちらにも、サーバーアプリには不要なChromeの埋め込みバージョンが含まれています。
サーバーアプリをパッケージ化する場合、これらが最適なオプションです:
node-compiler :Node.js用に設計されたAhead-of-time(AOT)コンパイラーで、動作します。
Nexe :node.jsアプリから単一の実行可能ファイルを作成します
このカテゴリでは、動的なrequireおよびnativeノードモジュールをサポートするnode-compilerの方が優れていると思います。使い方はとても簡単で、出力は25MBから始まります。 Node Compilerページで他のソリューションとの完全な比較を読むことができます。私はNexeについてあまり読みませんでしたが、今のところNodeコンパイラーはV8スナップショット機能を使用してjsファイルをバイナリー形式にコンパイルしないようですが、バージョン2で計画されています。 -in installer builder。
Node.jsアプリから単一の実行可能ファイルを作成するnexeを試してください
コマンドプロンプトから勝利を開始するのにうんざりした後、私もこれに出くわしました。わずかに改善されたバージョン。 whatjosh3736これは、XMLファイルを使用していくつかの設定を取得します。たとえば、Node.exe
へのパスと、デフォルトのapp.jsで起動するファイル。また、app.js(またはserver.jsまたは呼び出したもの)で指定したロードする環境(運用環境、開発環境など)。基本的に、NODE_ENV={0}
を追加します。{0}は、app.jsの構成の名前を変数として追加します。これを行うには、config.xmlの「mode」要素を変更します。ここでプロジェクトを取得できます==> github 。ポストビルドイベントでは、コピーパスを変更して、config.xmlと実行可能ファイルをNodejs
ディレクトリに自動コピーして、ステップを保存することができます。そうしないと、これらを編集しないと、ビルドで警告がスローされます。
var startInfo = new ProcessStartInfo();
startInfo.FileName = nodepath;
startInfo.Arguments = apppath;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = false;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
if(env.Length > 0)
startInfo.EnvironmentVariables.Add("NODE_ENV", env);
try
{
using (Process p = Process.Start(startInfo))
{
p.WaitForExit();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "Start Error", MessageBoxButtons.OK);
}
他にも多くのオプションがありますが、私の知る限り、GitHubで活発に開発されているプロジェクトが1つあります https://github.com/zeit/pkg 。あなたはそれで遊ぶことができます。 https://github.com/nexe/nexe でもう1つですが、活発な開発は行われていません。
nodebob と呼ばれるオープンソースのビルドツールプロジェクトがあります。動作しているプラットフォームウィンドウ、
実行可能ファイルは、リリースフォルダー内にあります。