序章

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サイトを操作する方法について説明します。

ジャスティン・エリングウッド