Linuxサーバーでnpmを使用してNode.jsパッケージを管理する方法

提供:Dev Guides
移動先:案内検索

序章

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

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