Linuxサーバーでnpmを使用してNode.jsパッケージを管理する方法
序章
Node.jsは、サーバーサイドプログラミングで人気のあるJavascriptプラットフォームであり、Webアプリをすばやく構築して実行できます。 過去のガイドでは、Ubuntu14.04サーバーにNode.jsをインストールする方法について説明しました。
このガイドでは、Node.jsパッケージ管理システムであるnpm
を使用して、サーバー上のNode.jsパッケージを管理する方法について説明します。 このユーティリティを使用すると、アプリケーションの依存関係を簡単に満たし、パッケージを検索し、インストールを管理できます。
Node.jsとnpm
の両方がインストールされていることを前提としています。 上記のガイドに従って、Ubuntu14.04でこれらを実行できます。 そのチュートリアルで説明されているnvm
メソッドを使用することをお勧めします。
すぐに始めたい場合は、Ubuntu 14.04のリポジトリでパッケージを見つけて、次のように入力してインストールすることもできます。
sudo apt-get update sudo apt-get install nodejs npm
npmに精通する
必要なコンポーネントがインストールされたので、開始できます。
最初に行うことは、シェル構成ファイルの下部に情報を追加することにより、シェルにnpm
オートコンプリート機能を追加することです。
次のように入力すると、次のように入力できます。
npm completion >> ~/.bashrc
ここで、構成ファイルを入手して、追加したばかりの新しい変更を再度読み取ります。
source ~/.bashrc
これで、npmは[TAB]
キーを押すことでコマンドを自動的に完了することができるはずです。
自分自身を方向付けるために行う最善のことは、npmが提供するヘルプ機能に精通することです。 npm内で使用できるサブコマンドを理解するには、次のように入力します。
npm help
Usage: npm <command> where <command> is one of: add-user, adduser, apihelp, author, bin, bugs, c, cache, completion, config, ddp, dedupe, deprecate, docs, edit, explore, faq, find, find-dupes, get, help, help-search, . . .
これらのサブコマンドの意味の簡単な要約を取得するには、次のように入力します。
npm -l
Usage: npm <command> where <command> is one of: adduser npm adduser Then enter stuff at the prompts bin npm bin npm bin -g (just prints the bin folder) . . .
次の形式を使用すると、これらの各コマンドのより広範な概要を取得できます。
npmhelpサブコマンド
これにより、目的のサブコマンド用の別のマニュアルページが表示されます。
実行したいアクションをカバーするコマンドがわからない場合は、次のようなものを使用してヘルプトピック内を検索することもできます。
npmヘルプ-search_termを検索
システムに関する情報の検索
組み込みのヘルプを設定してアクセスする方法を理解したので、探索できます。 npmに関連するシステムに関する情報を求める方法を学ぶことから始めましょう。
その前に、ローカルパッケージとグローバルパッケージの違いについて説明する必要があります。
ローカルパッケージとグローバルパッケージ
Node.jsアプリケーションを作成するときは、アプリケーションを保持するためのディレクトリ構造を作成します。 プロジェクトのディレクトリ内に、node_modules
というサブディレクトリがあります。 これには、プロジェクトにローカルをインストールできるすべてのモジュールが含まれます。
例としてパッケージディレクトリとして機能する空のディレクトリ構造を作成しましょう。
mkdir -p ~/projects/test_package/node_modules cd ~/projects/test_package
ローカルにインストールされたモジュールは、通常のJavascriptrequire()
メソッドを使用してプロジェクト内で使用できます。 これは、パッケージにほとんどの場合必要なものです。
パッケージのコマンドライン機能を使用する必要がある場合は、グローバルでインストールする必要があります。 グローバルにインストールされたアプリケーションは、~/.npm/
ディレクトリに保存されます。 それらのコマンドライン機能は、すべてのNode.jsアプリケーションで使用できます。 ただし、グローバルにインストールされたパッケージは、Javascriptrequire()
では使用できません。
これを知っていると、特定のタイプのパッケージごとに関連付けられた機能がどのように提供されるかがわかります。 デフォルトでは、-g
または--global
フラグを渡さない限り、ほとんどのnpmコマンドはローカルパッケージについて話していると想定します。
システムにインストールされているパッケージの一覧表示
ローカルパッケージとグローバルパッケージの違いがわかったので、次に進みます。 したがって、test_package
ディレクトリで利用可能な(ローカルにインストールされた)Node.jsパッケージを一覧表示するには、次のように入力します。
npm ls
/home/demouser/projects/test_package └── (empty)
アプリケーションにNode.jsパッケージをまだインストールしていないため、これは空で表示されます。
ただし、npmは一部のパッケージをグローバルに自動的にインストールします。 -g
フラグを渡して、次を確認してみましょう。
npm ls -g
/home/demouser/.nvm/v0.11.13/lib └─┬ [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] . . .
ご覧のとおり、かなりの数のグローバルパッケージがあります。 それらは依存関係ツリー形式で表示されます。
出力を変更するために使用できる他のオプションがいくつかあります。 -l
または-a
フラグを使用して、追加情報を取得できます。 オプションで--json
フラグを渡すことにより、この情報をJSONで表示できます。
その他の情報の照会
インストールされたパッケージについて単にnpmに尋ねる以外に、その環境に関する他の情報をnpmに尋ねることができます。
次のように入力すると、npmがローカルパッケージ階層内のルートモジュールディレクトリと呼んでいるものを確認できます。
npm root
/home/demouser/projects/test_package/node_modules
prefix
サブコマンドを使用して、作業中のパッケージの最上位パスを取得できます。
npm prefix
/home/demouser/projects/test_package
これらを-g
フラグと一緒に使用して、グローバルファイルが保存されている場所を確認することもできます。
npmが実行可能ファイルをインストールする場所を確認するには、現在のプロジェクトのbin
ディレクトリを見つけます。
npm bin
/home/demouser/projects/test_package/node_modules/.bin
パッケージのファイルの探索
パッケージがインストールされているディレクトリの場所にすばやく移動するには、実際にはexplore
サブコマンドを使用するだけです。 これにより、パッケージがインストールされているディレクトリにサブシェルが開きます。
たとえば、次のように入力することで、npm自体がインストールされているディレクトリでサブシェルを開くことができます。
npm explore -g npm
Exploring /home/demouser/.nvm/v0.11.13/lib/node_modules/npm Type 'exit' or ^D when finished
このディレクトリ内のファイルを操作または探索してから、サブシェルを終了して、以前に行っていたことに戻ることができます。
exit
パッケージマネージャーとしてのnpmの使用
これまで多くのことをカバーしてきましたが、これまでnpmの主な機能を回避してきました。 人々がnpmを使用する主な理由は、そのパッケージ管理機能のためです。
パッケージの検索とインストール
Node.jsパッケージが必要な場合は、npmを使用して検索できます。 プロジェクトにexpress
パッケージが必要になるとしましょう。 ExpressはWebフレームワークです。
このパッケージは、npmWebサイトにあるnpmパッケージアーカイブで検索できます。
npm search express
Expressは非常に人気のあるパッケージであるため、これは実際には非常に長いリストを返します。 これをless
のようなポケットベルにパイプして、見やすくすることができます。 次のような正規表現(シェルの解釈を回避するためのファンキーな文字を含む)を使用することもできます。
npm search /^express\[\ \]
NAME DESCRIPTION AUTHOR DATE VERSIO express Sinatra inspired web development framework =tjholowaychuk… 2014-05-12 4.2.0
ただし、結果が多すぎる場合は、npmサイトにアクセスして、正確なパッケージの名前を確認する方が簡単な場合があります。
パッケージの名前がわかれば、インストールできます。 Expressのコマンドライン機能が必要なため、グローバルにインストールします。
npm install -g express
これにより、Expressパッケージとそのすべての依存関係がダウンロードされ、グローバルnpmルートディレクトリにインストールされます。
パッケージをローカルアプリケーションのモジュールディレクトリに配置して、require()
行を使用してアプリに含めることができるようにする場合は、次のように入力します。
cd ~/projects/test_package npm install express
ただし、実際には両方の場所にパッケージと依存関係をインストールする必要はありません。これを回避する方法を以下に示します。
パッケージのアンインストール、重複排除、プルーニング、およびリンク
このパッケージはグローバルスコープとローカルスコープの両方で必要なので、このパッケージを両方の場所で利用できるようにする方法を提供する必要があります。
まず、次のように、ローカルバージョンのパッケージをアンインストールしましょう。
npm uninstall express
これで、次のように、グローバルコピーをローカルパッケージにリンクすることをnpmに伝えることができます。
npm link express
これにより、node_modules
ディレクトリ内にグローバルパッケージへのシンボリックリンクが作成され、両方の場所で使用できるようになります。
グローバルバージョンをアンインストールし、ローカルパッケージに移動してグローバルにリンクすることで、これとは逆のことができます。 私たちはこのようにそれを行うことができます。
まず、ローカルリンクとグローバルパッケージをアンインストールします。
npm uninstall express # This removes the symbolic link in local npm uninstall -g express # This removes the actual package in global
パッケージをローカルパッケージとして再インストールします。
npm install express
パッケージはローカルアプリケーションディレクトリ(~/projects/test_package/node_modules
)にありますが、グローバルにインストールされていません。 パッケージディレクトリに移動し、追加の引数なしでlinkサブコマンドを呼び出すようにグローバルにリンクできます。
cd ~/projects/test_package/node_modules/express npm link
これと同じ手順を使用して、作成している他のパッケージで独自のtest_package
を使用できるようにすることができます(適切なディレクトリ構造とファイルがあると仮定しますが、現在は使用できません)。
パッケージをインストールしてシャッフルしている間、dedupe
機能を利用する必要があります。
私たちのパッケージには、階層内のパッケージの下に依存関係がインストールされています。 ただし、一部のパッケージには共有の依存関係がある場合があります。 パッケージディレクトリに、それぞれ「blah」というパッケージを必要とする2つのモジュールが含まれている場合、「package1 / node_modules/blah」の下と「package2/node_modules /blah」の下に1つずつ、合計2回インストールされます。
dedupe
サブコマンドは、これらのケースを検索し、共有の依存関係を1レベル上に移動します。この場合、両方のパッケージが依存関係の単一のインストールを検出します。
たとえば、expressディレクトリ内のパッケージの依存関係を重複排除することができます。 これは、次のようにパッケージディレクトリで実行できます。
cd ~/projects/test_package/node_modules/express npm dedupe
これにより、2つのパッケージ(mimeとdebug)が見つかります。 デバッグモジュールは、実際には「送信」と呼ばれる別のエクスプレスモジュール依存関係の依存関係でもあります。 これは通常、重複排除されますが、バージョンの競合があるため、この場合は何も行われません。
パッケージを重複排除したとしましょう。これにより、一部の依存関係が上に移動しますが、その後、以前に依存関係パッケージを所有していたパッケージをアンインストールします。 依存関係はpackagesサブディレクトリ内にないため、削除されません。
このような場合、システムで不要なパッケージを「削除」するようにnpmに指示できます。 これは、親パッケージの依存関係リストにリストされていないパッケージを意味します。
次のコマンドを呼び出すことで、不要な依存関係を削除できます。
npm prune
これにより、不要なパッケージが削除されます。
古いパッケージを見つけて更新する
古くなっているパッケージを見つける必要がある場合は、次のように入力してください。
npm outdated
. . . Package Current Wanted Latest Location type-is 1.1.0 1.1.0 1.2.0 express > type-is debug 0.8.0 0.8.0 0.8.1 express > send > debug
これにより、より新しいバージョンが利用可能なパッケージのリストが表示されます。 インストールされているもの、アプリケーションが要求したもの、および現在のバージョンとの違いを示すグラフが表示されます。
パッケージを更新する場合は、パッケージのpackage.json
で要求されたバージョンを編集してから、更新コマンドを発行する必要があります。
npm update
結論
npmをパッケージマネージャーとして使用するためのより一般的な方法のいくつかについて説明しました。 これで、自分の開発で使用するために他の人のパッケージを取得して管理する方法についての良いアイデアが得られたはずです。
次のnpmガイドでは、動作を変更するためにnpmを構成する方法、npmを使用してパッケージを作成する方法、パッケージを公開してnpmWebサイトを操作する方法について説明します。