Linuxサーバーでnpmを使用してNode.jsパッケージを管理する方法
序章
Node.jsは、サーバーサイドプログラミングで人気のあるJavascriptプラットフォームであり、Webアプリをすばやく構築して実行できます。 過去のガイドでは、Ubuntu14.04サーバーにNode.jsをインストールする方法について説明しました。
このガイドでは、使用方法について説明します npm
、Node.jsパッケージ管理システム。サーバー上のNode.jsパッケージを管理します。 このユーティリティを使用すると、アプリケーションの依存関係を簡単に満たし、パッケージを検索し、インストールを管理できます。
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
ローカルにインストールされたモジュールは、通常のJavascriptを使用してプロジェクト内で使用できます require()
方法。 これは、パッケージにほとんどの場合必要なものです。
パッケージのコマンドライン機能を使用する必要がある場合は、グローバルでインストールする必要があります。 グローバルにインストールされたアプリケーションは、 ~/.npm/
ディレクトリ。 それらのコマンドライン機能は、すべてのNode.jsアプリケーションで使用できます。 グローバルにインストールされたパッケージは、Javascriptでは使用できません require()
けれど。
これを知っていると、特定のタイプのパッケージごとに関連付けられた機能がどのように提供されるかがわかります。 デフォルトでは、ほとんどのnpmコマンドは、パスしない限り、ローカルパッケージについて話していると想定します。 -g
また --global
フラグ。
システムにインストールされているパッケージの一覧表示
ローカルパッケージとグローバルパッケージの違いがわかったので、次に進みます。 したがって、(ローカルにインストールされた)Node.jsパッケージを一覧表示するには test_package
ディレクトリ、次のように入力できます。
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回インストールされます。
The 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サイトを操作する方法について説明します。