web-dev-qa-db-ja.com

node.jsアプリからexeファイルを作成する方法は?

次のように実行したノードアプリを作成しました。

node.exe app.js inputArg

これを単独で.exeにパッケージ化する方法はありますか?だから私はこのようなことをすることができますか?

App.exe inputArg

私はバッチファイルを使用してこれを偽造する方法がありますので、これを行うことができます:

App.bat inputArg

しかし、これには、そのフォルダーにすべての依存関係とノードがあることが必要です。これは理想的ではありません。

113
Aishwar

無料と商用の両方のいくつかの選択肢があります。私はそれらのいずれも使用していませんが、理論的には動作するはずです:

ほとんどの場合、バッチファイルをメインの実行可能ファイルとして保持し、node.exeとスクリプトをバンドルする必要があります。

スクリプトによっては、 JSDB にポートするオプションもあります。これは、リソースを単に追加するだけで 実行可能ファイルを作成する簡単な方法 をサポートします。

3番目の準解決策は、C:\utilsのようなノードを保持し、このフォルダーをPATH環境変数に追加することです。次に、そのディレクトリに.batファイルを作成して、node +希望のスクリプトを実行します。coffeescriptのcoffeeがこの方法でWindowsで動作するようになりました。このセットアップは、バッチファイル、vbスクリプト、またはインストーラーで自動化できます。

30
Ricardo Tomasi

私が使用したソリューションは、Roger Wangの node-webkit です。

これは、nodejsアプリをパッケージ化して配布する素晴らしい方法であり、アプリ全体を単一の実行可能ファイルとして「バンドル」するオプションも提供します。 Windows、Mac、Linuxをサポートしています。

ここ node-webkitアプリをデプロイするためのさまざまなオプションに関するドキュメントがありますが、簡単に言うと、次のことを実行します。

  1. ルートにpackage.jsonを使用して、すべてのファイルを圧縮します
  2. 拡張子を.Zipから.nwに変更します
  3. copy/b nw.exe + app.nw app.exe

追加のメモとして-私はこれを使用していくつかのプロダクションボックス/インストールCDアプリケーションを出荷しました、そしてそれはうまくいきました。同じアプリがWindows、Mac、Linux、およびWeb上で実行されます。

47
Clayton Gulick

この質問に出くわした人のために、ノードプロジェクトからexeを作成する2つのプロジェクト Pkg および Electron.atom.io がありますが、それらはわずかに異なります。

  1. Pkgはプロジェクトをネイティブコードにコンパイルします。また、アセットとnodejsインストールも含まれます(.exeを実行するためにシステムがnodejsをインストールする必要はありません)。ソースコードは含まれません。 結果の実行可能ファイルはWindowsのみ(.exe)です。 現在、すべてのプラットフォームがサポートされています。 現在、商用製品のライセンスが必要です。 完全にオープンソース。
  2. Electron.atom.ioコンパクト化せずに.exeを生成しますが、nodejsアプリを配布するために使用できます。 アプリケーションの配布 。利点は、electronがマルチプラットフォーム(windows、mac osx、linux)であるということです。短所は、ソースコードが含まれるということです。 asar アーカイブ内でアプリを配布する方法を提供するのは難しい。それは防弾とはなりませんが、プレーンなソースよりも優れています。
26
sokie

デフォルトでは、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 も含まれます。

22
josh3736

私が知っている最良のツールはNodeJSツールです: zeit/pkg

非常に使いやすい(例としてNexeよりもはるかに優れています)、グローバルにインストールすることができます:npm install -g pkg

macOS、Linux、およびWindows用の実行可能ファイルを作成するには:

pkg exampleApp.js

NodeJSソケットサーバーを使用する複雑なコードが少しありました。さまざまなアプリケーションを試しましたが、zeit/pkgを除き、どれも適切に作成しませんでした。

14
user8376713

試したことはありませんが、nexeはnexeがこれを実行できるようです。

https://github.com/crcn/nexe

12
B T

この質問に答えられてから、別のソリューションが開始されました。

https://github.com/appjs/appjs

この記事の執筆時点では、これは実行可能ファイルにコンパイルされたクロムパッケージを削除してnode.jsアプリをパッケージ化するための最終的なソリューションです。

編集:AppJSはもはやアクティブではありませんが、それ自体はdeskshellと呼ばれるフォークを示唆しています。

https://github.com/sihorton/appjs-deskshell/

12
bitfed

ここには多くの良い答えがありますが、それらは 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)

11
Nepoxx

discloseを試してください: https://github.com/pmq20/disclose

discloseは、次の特性を備えたNode.jsプロジェクトおよびNode.jsインタープリターから、基本的に自己解凍型exeを作成します。

  1. GUIはありません。純粋なCLI。
  2. 実行時の依存関係なし
  3. WindowsとUnixの両方をサポート
  4. 初めてゆっくり実行(キャッシュディレクトリに抽出)し、その後は永遠に高速

node-compilerを試してください: https://github.com/pmq20/node-compiler

Node.jsプロジェクトを1つの実行可能ファイルにコンパイルするために、node-compilerという新しいプロジェクトを作成しました。

ソースコードは標準のNode.jsライブラリと同様にNode.jsインタープリターと一緒にコンパイルされるため、discloseよりも優れています。

さらに、ファイルおよびディレクトリの要求を、実行時にファイルシステムではなくメモリに透過的にリダイレクトします。そのため、コンパイルされた製品を実行するのにソースコードは必要ありません。

仕組み: https://speakerdeck.com/pmq20/node-dot-js-compiler-compiling-your-node-dot-js-application-into-a-single-executable

同様のプロジェクトと比較して、

  • 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つのプラットフォームすべてをサポートしますが、特別なものはありませんカーネルの機能要件。

6
Minqi Pan

そのために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 から入手できます

3
areve

私は数日間このトピックを調査してきましたが、ここに私が見つけたものがあります。オプションは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。

2
Ali

Node.jsアプリから単一の実行可能ファイルを作成するnexeを試してください

https://github.com/nexe/nexe

2
Dhrubo

コマンドプロンプトから勝利を開始するのにうんざりした後、私もこれに出くわしました。わずかに改善されたバージョン。 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);
        }
1
origin1tech

他にも多くのオプションがありますが、私の知る限り、GitHubで活発に開発されているプロジェクトが1つあります https://github.com/zeit/pkg 。あなたはそれで遊ぶことができます。 https://github.com/nexe/nexe でもう1つですが、活発な開発は行われていません。

1
Rohit Luthra

nodebob と呼ばれるオープンソースのビルドツールプロジェクトがあります。動作しているプラ​​ットフォームウィンドウ、

  1. 単にプロジェクトを複製またはダウンロードする
  2. すべてのnode-webkitプロジェクトファイルをappフォルダーにコピーします。
  3. build.batスクリプトを実行します。

実行可能ファイルは、リリースフォルダー内にあります。

0
cagcak