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


123

私が書いたノードアプリがあり、次のように実行します。

node.exe app.js inputArg

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

App.exe inputArg

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

App.bat inputArg

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




ツールの良いリストはこちらです:stackoverflow.com/a/12486874/32679
GrGr

1
ここに回答を追加する人は、すでに完了している場合は本当に検討する必要があると思います。この質問は、さまざまな品質/活動のさまざまなオープンソース製品へのリンクの山になっています。
リアム

回答:


35

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

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

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

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


これらは見た目が良く、私がやりたいことをできるように見えます。私はそれに打撃を与えて、あなたに戻ります。
アイシュワル

2
「高度な」Batch To EXEコンバーターを試してみましたが、それは魅力のように機能しました。依存関係をEXEファイルにパッケージ化できます。助けてくれてありがとう。
アイシュワール

1
@Aishwar、しかしnode_modulesフォルダーをバンドルすることはできないため、その中で高度なことは何もできません...
Clint

アプリケーションの実行時にnode_modulesをzip / rarし、一時ディレクトリに抽出するとどうなりますか?ただし、モジュールが多い場合は、少し遅くなる可能性があります。
Jarrod Mosen 2014年

55

私が使用したソリューションは、Roger WangのノードWebキットです。です。

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

ここには、node-webkitアプリをデプロイするためのさまざまなオプションに関するいくつかのドキュメントですが、簡単に言えば、次のことを行います。

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

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

更新:プロジェクト名が「nw.js」に変更され、適切にここに配置されます:nw.js


1
試してみて、うまくいきました!そして、それはインテルの人々によってサポートされています。
Timo Huovinen 2014

これは、現時点での正しい最新の答えです。こちらのノードwebkitチートシートも参照してください: gist.github.com/LeCoupa/80eca2716a2b13c37cce JSをコンパイルする方法など、非常に役立つ他のものが含まれています(または、少なくとも、昔ながらの言葉にしたい方法に応じて、バイトコードにクランチします) "コンパイル")。
エリック・レッペン、2015

私はこの答えが好きですが、これはまだスタンドアロンexeを作成しません。IntelGithubのnw.jsによると、同じフォルダーに少なくとも2つの他のファイル(nw.pakとicudt.dll)が必要です。スタンドアロンexeをどのように作成しますか?
ジェフベイカー

@JeffBaker githubのドキュメントを少し見下ろすと、これを見ることができます:github.com/nwjs/nw.js/wiki/…追加のファイルを含めたくない場合に実行できます。
Clayton Gulick

@ Clayton、Nw.jsもchrome.comによって保護されています。developer.chrome.com/apps/migration#native
Pacerier 2017年

29

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

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

2
更新してください:EncloseJSはLinuxとOS Xをサポートしています。
000000000000000000000 2016年

コメントを編集しました!@ 000000000000000000000
sokie 2016年

EncloseJSはそのための方法です。今からやってみます!回答を追加していただきありがとうございます。+1 :)
tftd 2016

EncloseJSをインストールできません。ErrコードELIFECYCLEがあり、有用なエラーメッセージは表示されません。
Elmue、

2
EncloseJSはもうメンテナンスされていません。相続人はzeit / pkg(npmjs.com/package/pkg)のようです
Lucas Gonze

21

デフォルトでは、Windowsは.jsファイルをMicrosoftのスタンドアロンJSランタイムエンジンであるWindows Script Hostに関連付けます。コマンドプロンプトで「script.js」と入力するか.js、エクスプローラーでファイルをダブルクリックすると、スクリプトは次のように実行されます。wscript.exeます。

これはグローバル設定ローカルの問題を解決している可能性がありますが、代わりにファイルを関連付ける ことができるため、script.jsと入力することができ.jsますnode.exe、コマンドプロンプトで、スクリプト上でアイテムをダブルクリック/ドラッグすると、Nodeでが起動します。

もちろん、私と同じように、.jsファイルをエディターに関連付けて、ファイルをダブルクリックしてお気に入りのテキストエディターを開く場合、この提案はあまり役に立ちません。また、「ノードで実行」の右クリックメニューエントリ.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#ブートストラップアプリがすぐに終了し、ノードがコンソールウィンドウを担当することに注意してください。

これはおそらく比較的幅広い関心があるので、私は先に進んで、見知らぬ人と一緒にバンに入るのがあなたの仕事であれば、コンパイルされたexeを含めてGitHub利用できるようにしました。


あなたが言ったように、これは私の問題を理想的な方法で解決しません。しかし、興味深い読み物には+1
Aishwar

@ Aishwar、Nodeを起動するシンプルなアプリを追加しました。編集を参照してください。
josh3736

@ josh3736あなたのexeはまだあなたが同じフォルダにnode.exeを持っていることを必要としますか?
Ricardo Tomasi

@RicardoTomasi、いいえ。NodeがシステムのProgram Filesディレクトリ(インストーラーが配置する場所)にインストールされていることを前提としています。
josh3736 2011年

@ josh3736これは興味深い解決策です。私はあなたがしたことが好きです、私はもう一度+1できればいいのに:) ただし、ユーザーがnode.jsをインストールして標準パスに含める必要があるため、これはまだ理想的ではありません。
アイシュワル

20

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

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

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

pkg exampleApp.js

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


AppiumインストールをExeファイルに圧縮しようとしましたが、zeit / pkgが完全に失敗しました。ディスク上の310MBから、18MBの小さなExeファイルができましたが、これは明らかにまったく機能しませんでした。
Elmue、


12

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

https://github.com/appjs/appjs

これを書いている時点では、これは実行可能ファイルにコンパイルされたストリップされたchromiumパッケージを介してnode.jsアプリをパッケージ化するための最終的なソリューションです。

編集:AppJSはアクティブではなくなりましたが、それ自体がデスクシェルと呼ばれるフォークを提案しています。

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


1
壊れたリンクのようです。
starbeamrainbowlabs 2013

1
このプロジェクトは現在アクティブではありません。Clayton Gulickが言及した代替案については、node-webkitを参照してください。
Kukks 2014年

Appjs自体は、deskshell github.com/sihorton/appjs-deskshell
bitfed

11

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


1
どうも。WindowsからLinux実行ファイルを作成できますか?
Sasivarnan、2015

1
私の知る限りでは、できません。JXCoreはOSからいくつかのファイルを取得して実行可能ファイルを作成し、それらのファイルをパッケージ化しないと思います。そのため、Linux実行可能ファイルを作成するには、このコマンドをLinuxで実行する必要があります。
Nepoxx


1
ここのすべてのリンクは死んでいます。これは機能します:github.com/jxcore/jxcore-release
Elmue

7

試してくださいdisclosehttps : //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-compilerNode.jsプロジェクトを単一の実行可能ファイルにコンパイルするためにを作成しました。

それは disclose、あなたのソースコードは、単に標準のNode.jsライブラリのように、Node.jsのインタプリタと一緒にコンパイルされているので、それは、初めてゆっくりと実行されることはありませんことを特徴とします。

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

仕組み: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):browserifyを使用するため、Nexeは動的な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つのプラットフォームすべてをサポートしますが、カーネルからの特別な機能要件はありません。


@StéphaneLaurentノードコンパイラを確認してください。exeでコマンドライン引数を使用することは間違いなくサポートされています。
Minqi Pan 2016

2017年8月30日の最新のコミット(2年前)。廃番?!
Thach Lockevn

4

そのために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()

より詳しい情報:

注:通常、私はオープンソース/フリーソフトウェアについて推奨していますが、この場合、仕事を成し遂げるものは見つかりませんでした。


1
データはRAM内に保存され、ハードドライブには保存されないため、適切なコード保護もサポートします
z0r1fan

3

これらのソリューションのいずれかが私の要件を満たしていることがわかりました。そのため、これを実行するnode2exeという独自のバージョンのノードを作成しました。https://github.com/areve/node2exeから入手できます


3

私はこのトピックを数日間調査してきましたが、これが私が見つけたものです。オプションは2つのカテゴリに分類されます。

デスクトップアプリを作成する場合の最適なオプションは次のとおりです。

1- NW.js:すべてのNode.jsモジュールをDOMから直接呼び出すことができ、すべてのWebテクノロジーでアプリケーションを作成する新しい方法を可能にします。

2- Electron: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およびネイティブノードモジュールをサポートするノードコンパイラの方が優れていると思います。使い方はとても簡単で、出力は25MBから始まります。Node Compilerページで他のソリューションとの完全な比較を読むことができます。Nexeについてはあまり読みませんでしたが、現時点では、Node CompilerはV8スナップショット機能を使用してjsファイルをバイナリ形式にコンパイルしないようですが、バージョン2で計画されています。また、組み込みのインストーラービルダーも組み込まれます。


2
ElectronOPの問題に対する有効な提案であることを正当化しません。それはまったく異なるNodeフレームワークです。
progyammer

素晴らしい比較!
Vlad


1

コマンドプロンプトからwinを開始するのに飽きたので、これにも遭遇しました。少し改良版。何josh3736以上。これは、XMLファイルを使用していくつかの設定を取得します。たとえばNode.exe、デフォルトのapp.jsで開始するファイルへのパスとファイル。また、app.js(またはserver.jsまたはそれと呼ばれるもの)で指定した、ロードする環境(production、devなど)。基本的にNODE_ENV={0}{0}は、varとして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);
        }


0

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.