npm パッケージマネージャの「
npm install 」コマンドは、特定のモジュールの依存関係を
「/ node_modules」サブディレクトリ
に ローカルにインストールするため
に最もよく使用
さ れます
。
ただし、
「- g 」
スイッチ (「global」という単語から)を使用
してこのコマンドを実行することは可能です。
グローバル (つまり、システム全体に共通)の場所で指定されたパッケージのインストールを提供します。 さらに、PATH(必要な任意のディレクトリからの以降の起動)に、インストールされたパッケージの
package.jsonファイルの
「bin」 プロパティで指定さ
れたコマンドが表示されます。
ドキュメントによると、Windowsでこのような一般的な場所は、ノードインストールディレクトリのサブディレクトリ
「/ node_modules」です。 他のシステムでは、このような一般的な場所はほとんどの場合、ディレクトリ
「/ usr / local / lib / node_modules」です (ノードはディレクトリ
「/ usr / local / bin」にインストールされ
ます)。
通常、このアプローチは、コマンドラインから実行するように設計されたさまざまなユーティリティのグローバルインストールに使用されます。 以下に例を示します。
- コマンド「 npm install jshint -g 」は、 コマンド「jshint」がJSHintの起動に使用されるPATH に表示されるようにします 。
- 「 npm install browserify -g 」 コマンドは、 Browserifyの起動に役立つ「browserify」コマンドがPATH に表示されるようにします。
- 「 npm install less -g 」 コマンドは、 less.jsの実行に役立つ「lessc」コマンドがPATH に表示されるようにします。

ただし、CLI(コマンドライン)はウェッジに対応していませんでした-Habrahabrの読者は、Node.js APIを使用するJavaScriptアプリケーションに、HTMLおよびCSSで構成されるGUI(グラフィカルユーザーインターフェイス)も装備できることを既に認識しているはずです。 これを行うには、エンジン上でNodeの代わりにそのようなアプリケーションを実行する必要があります。これは昨年まで
node-webkitと呼ばれ、現在(2015)年に1月14日に
nw.jsに
名前が
変更され ました。
GUIアプリケーションは
、npmを使用
してnpmパッケージからシステムにグローバルにインストールすることもできます。 それについて話しましょう。
最初のステップは明確です
。GUIアプリケーションのソースコードを
npmパッケージ に入れ、そこに入れる必要があります。
ただし、このコードを実行するに
はnw.jsエンジンも必要に
なりますが、同じパッケージに入れることはあまり合理的ではありません。
まず、エンジン
のボリューム(たとえば、80メガバイトを超えるWindowsの場合)は、エンジンを各パッケージに挿入すると、
npm-packageリポジトリに過剰な負荷がかかるリスクがあります。
第二に、システム(Windows、Linux、Mac OS X)またはそのビット容量
(32ビットまたは
64ビット)に応じて
、エンジンは異なるはずです-エンジンの6つの可能なバージョンすべてを
npmパッケージに
入れると、リポジトリだけでなく、エンドユーザーも合計ボリュームから開始し、わずか0.5ギガバイトで到達します。
この問題を克服するために、
開発者は
npm-package nwを作成
しました
。GUIアプリケーションは、その依存関係(
package.jsonファイルの
「dependencies」セクションで)を指定できます。このパッケージがインストールされると、独自に定義されます
package.jsonファイルで、特定の最終オペレーティングシステムに適したインターネットから
nw.jsの正確な
バージョンを自動的にダウンロードする
ポストインストールスクリプト。
また、nwパッケージ
は (
package.jsonファイルの
「bin」プロパティで)「nw」コマンドも
定義することに注意してください。 したがって、
GUIアプリケーション はこのコマンドを独自の
「開始」 スクリプトとして指定
できます。その後、ディレクトリで
「 npm start 」コマンドを発行する
ことにより、
GUIアプリケーションを開始でき
ます 。
しかし、これは
GUIアプリケーションを起動する最も便利な方法ではないことがすぐにわかり
ます。 2語ではなく1語(アプリケーション名)で構成され、さらに任意のディレクトリからのコマンドで起動できるようにする方がはるかに便利です。
package.jsonファイルフィールドにスクリプトがある場合、アプリケーションはこの目標を達成できると上記で述べました。npmは、グローバルインストール中にこのスクリプトを自動的にPATHに配置し、目的の名前を付けます。 さて、nwパッケージは
「 .findpath() 」メソッドを
エクスポートします。このメソッドは、ダウンロードされた
nw.jsエンジンの特定の場所を見つけるために使用できます(その後のエンジンの起動用)。
たとえば、
ハイパーテキストベクトルFidonetのブラウザの一部として、
このようなスクリプトのオープンソースコードは次のようになり
ます 。
#!/usr/bin/env node require('child_process').spawn( require('nw').findpath(), ['.'].concat( process.argv.slice(2) ), { cwd: __dirname, detached: true, stdio: 'ignore' } ).unref();
fidonetovskogoには特に何も含まれていないことが簡単にわかります。 したがって、
npmパッケージからグローバルにインストールする場合は、
GUIアプリケーションにわずかな変更を加えることなく、同じ例をすべて使用でき
ます。
この例の次のフラグメントに注意してください。
- “ Detached:true ” および“ .unref() ”:nw.jsエンジンは別のプロセスとして起動し、startコマンドはすぐに作業を終了します(待機しません)。
- “ Cwd:__dirname ”:npm.jsエンジンは、npmがグローバルにstartコマンドをインストールしたディレクトリで動作を開始します( GUIアプリケーション全体が同じ場所にあると仮定します。ただし、このコードをパッケージファイルの隣に配置しない場合.json 、私がしたように、そしていくつかのサブディレクトリで、サブディレクトリからの出力をこの行の親ディレクトリに追加します);
- " ['。']。Concat(process.argv.slice(2)) ":コマンドラインのnw.jsエンジンは、最初にピリオド(現在のディレクトリから起動するアプリケーションを取得するための命令)を受け取り、次に起動コマンドのすべてのコマンドラインパラメーターを受け取ります。
- 「 #!/ Usr / bin / env node 」:Windowsでは、この行は不要に見えるかもしれませんが、この印象は幻想です(実際、npmはこの行の存在に依存しています)。
上記のアプローチは、以前の
node-webkitエンジンを使用した
nw.jsの代わりに、アプリケーションのインストールにも適用でき
ます。 この目的のために、
npm nwパッケージの代わりに、以前の(さらに、非公式の)
npmパッケージ -nodewebkitを使用する必要があります
。