私が書いたノードアプリがあり、次のように実行します。
node.exe app.js inputArg
これを単独で.exeにパッケージ化する方法はありますか?だから私はこのようなことをすることができますか?
App.exe inputArg
バッチファイルを使用してこれを偽造する方法があるので、これを行うことができます。
App.bat inputArg
しかし、これにはすべての依存関係とノードがそのフォルダーにあることが必要であり、これは理想的ではありません。
私が書いたノードアプリがあり、次のように実行します。
node.exe app.js inputArg
これを単独で.exeにパッケージ化する方法はありますか?だから私はこのようなことをすることができますか?
App.exe inputArg
バッチファイルを使用してこれを偽造する方法があるので、これを行うことができます。
App.bat inputArg
しかし、これにはすべての依存関係とノードがそのフォルダーにあることが必要であり、これは理想的ではありません。
回答:
無料と商用の両方でいくつかの選択肢があります。私はそれらのいずれも使用していませんが、理論的には機能するはずです。
ほとんどの場合、バッチファイルをメインの実行可能ファイルとして保持し、node.exeとスクリプトをバンドルする必要があります。
スクリプトによっては、実行可能ファイルを作成する簡単な方法をサポートするJSDBに移植するオプションもあります。単にそれにリソースを追加することによってを。
3番目の準解決策は、ノードをどこかに保持C:\utils
し、このフォルダーをPATH
環境変数に追加することです。次に、そのディレクトリにノードを実行する.batファイルを作成できます+好みのスクリプト-私はcoffee
この方法でcoffeescript がウィンドウ上で動作するようにしました。このセットアップは、バッチファイル、vbスクリプト、またはインストーラーを使用して自動化できます。
私が使用したソリューションは、Roger WangのノードWebキットです。です。
これは、nodejsアプリをパッケージ化して配布するための素晴らしい方法です。アプリ全体を単一の実行可能ファイルとして「バンドル」するオプションも提供されます。Windows、Mac、Linuxをサポートしています。
ここには、node-webkitアプリをデプロイするためのさまざまなオプションに関するいくつかのドキュメントですが、簡単に言えば、次のことを行います。
追加されたメモと同じように、私はこれを使用していくつかのプロダクションボックス/インストールCDアプリケーションを出荷しました。同じアプリがWindows、Mac、Linux、ウェブ上で実行されます。
更新:プロジェクト名が「nw.js」に変更され、適切にここに配置されます:nw.js
この質問に出くわした人のために、ノードプロジェクトからexeを作成する2つのプロジェクト、PkgとElectron.atom.ioがあります。これらは少し異なります。
デフォルトでは、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で利用できるようにしました。
私が知っている最高のツールはNodeJSツールです:zeit / pkg
非常に使いやすく(例としてNexeよりもはるかに多く)、グローバルにインストールできます。
npm install -g pkg
macOS、Linux、Windows用の実行可能ファイルを作成するには:
pkg exampleApp.js
NodeJSソケットサーバーを使用する少し複雑なコードがあり、さまざまなアプリケーションを試しましたが、zeit / pkgを除いて、適切に作成されたものはありませんでした。
試したことはありませんが、nexeはこれを実行できるように見えます。
この質問に回答したため、別のソリューションが開始されました。
https://github.com/appjs/appjs
これを書いている時点では、これは実行可能ファイルにコンパイルされたストリップされたchromiumパッケージを介してnode.jsアプリをパッケージ化するための最終的なソリューションです。
編集:AppJSはアクティブではなくなりましたが、それ自体がデスクシェルと呼ばれるフォークを提案しています。
ここには多くの良い答えがありますが、それらはすべて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-compiler
Node.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つのプラットフォームすべてをサポートしますが、カーネルからの特別な機能要件はありません。
そのために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- 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で計画されています。また、組み込みのインストーラービルダーも組み込まれます。
Electron
OPの問題に対する有効な提案であることを正当化しません。それはまったく異なるNodeフレームワークです。
node.jsアプリから単一の実行可能ファイルを作成するnexeを試してください
コマンドプロンプトから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);
}
他にも多くのオプションがあるかもしれませんが、私の知る限り、GitHub https://github.com/zeit/pkgで開発中のプロジェクトが1つあります。あなたはそれで遊ぶことができます。もう1つはhttps://github.com/nexe/nexeにありますが、アクティブな開発ではありません。