JavaScriptは、WebサイトやWebアプリケーションの開発に関して最もよく使用される言語です。多数のリソースが驚異的であり、さらに、利用可能なライブラリの数も驚異的です。
最初は、これらのライブラリは少なく、保守が簡単です。ただし、すぐに十分な依存関係地獄が始まり、より成熟したソリューションが必要になります。
Node Package Manager(npm)を入力してください–JavaScriptパッケージマネージャーは、 Node.js 、独立して使用することもできますが。プロジェクトの依存関係を非常に細かく制御でき、オープンソースの世界に貢献するための優れた方法を提供します。
npm install
を実行するだけで開始できますそれをJavaScriptファイルに挿入します。
特定のバージョンをインストールしたいですか?問題ない。 npm install @1.2.3
を実行します。
パッケージをグローバルにインストールしたいですか(MochaやAngular-CLIなど)? -g
を追加するだけですそのように:npm install -g angular-cli mocha
。
確かに、ほとんどのユースケースはnpmのインストールで停止し、他に何もする必要はありません。ただし、npmには多くの追加機能があり、それらについて説明し、私が不可欠、本当に便利、または単に素晴らしいと思う機能を強調します。
CLIは、ユーザーがほとんどの時間をnpmとの対話に費やす場所であり、そのヘルプインターフェイスは実際に役立ちます。
ヘルプのクエリ(npm help
)は、オプションの配列全体を吐き出し、npm help-search
を実行します。 npmマークダウンから直接検索結果のリストを提供します。
目立つコアコマンドは次のとおりです。
install
:npmを操作する際の必要性から、ここで言及します。新しいパッケージをローカルまたはグローバルにインストールするため(-g
を追加する場合)、またはpackage.json
にリストされている依存関係をインストールするために使用されますファイル(これについては後で詳しく説明します)。
uninstall
:これも不可欠です。 node_modules
から特定のパッケージを削除するために使用されますローカルまたはグローバルのいずれかのディレクトリ(-g
を追加する場合)。
access
:これは、コンテキストnpm-organizationsおよびスコープ(プライベート)パッケージ内のnpmユーザー権限管理者の遊び場です。真剣に強力なもの。 adduser
、owner
、team
などと組み合わせて使用すると、誰が何にアクセスできるかをきめ細かく制御できます。
bin
:パッケージはいったいどこにインストールされていますか?このコマンドを実行して、ファイルの絶対パスを確認します。
cache
:npmの左、右、中央からパッケージのインストールを開始する場合、このコマンドは非常に便利です。 ls
で呼び出すかローカルにキャッシュされたパッケージのリストを表示する、またはclean
を使用するサブコマンドキャッシュ内にあるすべてのパッケージをクリアするサブコマンド。 npmレジストリがまだ少し不安定だった頃、これは安定した環境に戻るため、またはnpm権限を適切に設定しなかったときにリセットするために不可欠でした。
Ruby onRailsのベストプラクティス
config
:後でさまざまな構成オプションについて説明しますが、このコマンドは主に、set
、get
を使用して、ローカルまたはグローバル構成ファイルの構成プロパティを永続化することを扱います。またはdelete
サブコマンド。
dedupe
またはddp
:長期間にわたってプロジェクトで作業し、npmから直接パッケージをインストールする場合、このコマンドはローカルパッケージツリーをウォークし、依存関係を単純化しようとします。
link
:独自のnpmパッケージを開発している場合、これによりグローバルコンテキストへのシンボリックリンクを作成できるため、npmレジストリからグローバルにインストールされているかのようにテストできます。たとえば、CLIがグローバルにインストールされているノードでアセンブリツールを作成している場合、最初にデプロイしなくても、このコマンドを実行してCLIの動作をテストできます。
ls
:パッケージの依存関係とその依存関係をツリー構造で視覚化するために使用されます。見るのはかっこいいし、他のプロジェクトとの比較にも役立ちます。
outdated
:これは、インストールされている依存関係の現在の状態と、それらが古くなっているかどうかを評価するために使用されます。ルート依存関係リストが数百行の長さのプロジェクトでは、パッケージを手動でチェックすることはほぼ不可能です。追加-g --depth=0
このコマンドを使用すると、グローバルにインストールされたパッケージも確認できます。
publish
:このコマンドは、npm用の独自のパッケージを開発するときに不可欠です。名前が示すとおりに機能します。パッケージをnpmレジストリに公開します。
search
:これを使用して、3番目の引数で提供されたテキストを含むすべてのパッケージをレジストリで検索します。
shrinkwrap
:要するに、このコマンドを使用すると、パッケージ内の特定の依存関係バージョンを順番にロックダウンできるため、semver( セマンティックバージョニング )番号は製品コードを壊しません。
star
:使用しているパッケージは本当に好きですか?このコマンドを使用して、ターミナルから直接感謝の気持ちを示します。これは、npmレジストリのパッケージのページに反映されます。
update
:これは通常outdated
の後に続きます古いパッケージを更新するコマンド。
version
:これはあなたにpackage.json
をぶつけるための速記を与えますversionプロパティ、およびgitタグをすべて1つで実行します。
これらのコマンドのほとんどはサブコマンドや構成をとることができ、このリストは決してCLIに関するすべての議論ではないことに注意してください。
構成はnpmの主要部分であり、構成変数を設定する方法は複数あります。
まず、端末からCLIを介して構成を設定できます。
通常、次のようになります:npm -- []
。
値が指定されていない場合、オプションはデフォルトでtrueに設定されます。
たとえば、スコープ付き(プライベート)npmパッケージで作業していて、パブリックパッケージとして公開することにしたとします。
これは、--access=public
を追加することで簡単に実行できます。あなたのpublish
にコマンド。プロパティをパブリックに指定しなかった場合、デフォルトは制限されます(プライベート)。
このような他のコマンドに追加された構成はどこにでも保持されるわけではないため、CLIを介して構成の配列を設定するのは面倒になる可能性があります。
そのような場合は、環境変数を使用して構成を設定する方がよい場合があります。
npm_config_
で設定された環境変数プレフィックスはnpmの設定に使用されます。
例:export npm_config_registry=localhost:4321
レジストリ構成オプションをグローバルに設定し、npmが実行されると、ポート4321のローカルホストにあるnpmレジストリを使用します。
特別な.npmrc
を使用して構成オプションを設定することもできます。ファイル。要件に応じてさまざまなレベルで設定できます。
package.json
ファイル、通常はpath/to/project/.npmrc
~/.npmrc
$PREFIX/etc/npmrc
/path/to/npm/npmrc
にあります。.npmrc
の構成設定次の形式のコマンドを実行することにより、CLIを使用してファイルを変更および永続化できます:npm config set
。
たとえば、npm config set access public
を実行できます。スコープ(プライベート)パッケージの公開構成を永続的に公開します。
デフォルトでは、このコマンドは構成をローカルに保持します(上記のユーザーレベルの構成)が、-g
を追加できます。それをグローバルに永続化する。
永続化された構成をプロジェクトレベルまたは組み込みレベルで行う必要がある場合、.npmrc
ファイルは、テキストエディタを使用して変更する必要があります。
最後に、構成はpackage.json
から設定できます。ファイル。ただし、プロジェクトレベル.npmrc
であるため、これはめったに使用されません(明示的に必要な場合にのみ使用する必要があります)。ファイルは、パッケージ構成を設定するために従来から好まれている場所です。
access
:上で説明したように、権限を設定するために使用されます。
always-auth
:この設定はデフォルトでfalseに設定されていることに注意してください。 trueに設定されている場合、npmはレジストリに接続するときに常に認証を必要とします。
ca
:デフォルトはnpm認証局(CA)です。 nullに変更して、既知のレジストラのみへのアクセスを許可するか、特定のCA証明書へのアクセスのみを許可するように変更できます。この設定は、cafile
、cert
とともにおよびstrict-ssl
はめったに使用されませんが、npmのセキュリティと信頼性の側面について話し、インストールするパッケージが期待するソースからのものであることを安心して確認できます。
color
:これはデフォルトでtrueに設定され、stdout
に色を付けることで、端末の標準的な暗さから抜け出します。これは、ttyファイル記述子で許可されています。 falseに設定すると、端末は鈍いままになります。 always
に設定すると、常にカラーで出力されます。
depth
:この設定では、実行の深さを割り当てることにより、ls
やoutdated
などの再帰コマンドで表示される内容をきめ細かく制御できます。値0は依存関係の最初のレベルのみを評価しますが、無限大(デフォルト)はすべてのレベルの依存関係を評価します。このルールの例外は、outdated
で使用する場合です。その場合、より適切な出力を保証するために、無限大は0として解釈されます。
dev
:これはデフォルトでfalseに設定されていますが、trueに設定されている場合(npm install
を実行している場合)、package.json
内のすべての開発依存関係ファイルは通常の依存関係とともにインストールされます。
dry-run
:この設定がtrueに設定されている場合、npmはパッケージに変更を加えませんが、代わりに何が行われたかを通知します。これは、dedupe
などの特定のコマンドを実行するときに非常に役立ちます。またはupdate
。
git-tag-version
:デフォルトでtrueに設定されています。この設定は、npm version
を実行するときにgitのバージョンにタグを付けますコマンド。 gitでバージョンにタグを付けた大規模プロジェクトのパッケージマネージャーとしてnpmを使用している場合は、時間を節約でき、package.json
を更新することを忘れないでください。あなたのためのファイル。
loglevel
:デフォルトでは、これはwarn
に設定されており、npmコマンドを実行するとエラーと警告が出力されます。その他の設定には、出力を提供しないsilent
が含まれます。 error
、エラーのみを出力に記録します。 http
、httpリクエストエラーのみをアナウンスします。 info
、有益な出力が必要な場合); verbose
、ほとんどすべてをログに記録します。そしてsilly
は、その名前が示すように、ばかげた量の出力を提供し、次にいくつかを提供します。
production
:これがtrueに設定されている場合、npmはそれに応じて動作し、すべてのコマンドを本番モードで実行します。これは、開発またはオプションの依存関係がインストールされず、開発関連のタスクが実行されないことを意味します。
rollback
:trueに設定すると、失敗したインストールはすべて削除されます。これは、依存関係のインストールが失敗した場合に役立ちます。ロギングのレベルに応じて、失敗したインストールを確認し、それらをメモして、npm install
を実行できるはずです。ロールバックオプションをtrueに設定したコマンド。次に、メモとドライランインストール(上記のとおり)を使用して、問題をデバッグできます。
save : When installing a package directly from the registry, you can append
–save to the command which will add the installed package to the dependencies option in the
package.json file. For example,
npm install lodash`は、依存関係にlodashを追加します。
save-dev
:構成の保存オプションと同様に、--save-dev
を追加しますパッケージをインストールすると、package.json
のdevDependenciesオプションに追加されます。ファイル。
save-optional
:構成の保存オプションと同様に、--save-optional
を追加しますパッケージをインストールすると、package.json
のoptionalDependenciesオプションに追加されます。ファイル。
save-exact
:パッケージをインストールする場合、save
、save-dev
およびsave-optional
オプションはpackage.json
を変更しますsemver range演算子を使用して、インストールされたパッケージをそれぞれのプロパティに挿入します。値trueで「save-exact」構成設定を呼び出す場合、上記の設定の1つと組み合わせて、特定のバージョン番号が使用され、semver範囲は無視されます。
save-prefix
:これは、save
、save-dev
を使用するときにsemver範囲演算子を設定しますまたはsave-optional
。デフォルトは^
で、インストール時にパッケージのマイナーアップグレードを実行できます。これは、任意の有効な接頭辞付きsemver範囲演算子に設定できます。
tag-version-prefix
:従来のデフォルトはv
で、npm version
の実行時にgitタグバージョンに追加されるものを指定します。
npmを使用して自分自身を更新することもできます。
npm install -g [email protected]
を実行するだけで、npmが最新の安定版リリースに更新されます。の各バージョンに注意することが重要です Node.js npmの特定のバージョンが付属しています。私の経験では、そのペアリングをあまりいじらないでください。
結局のところ、意図したとおりにペアリングを続けることをお勧めします。
npmをスタンドアロンツールとして使用する場合は、選択したバージョンを使用することの意味を理解してください。同じシステム上で異なるNode.jsバージョン(そしてnpmバージョン)を管理するための優れたツールがあります。 nvm 。
package.json
ファイルは、すべてをリンクする重要な要素です。
これは、パッケージをnpmレジストリに公開するための要件であり、依存関係の管理部分が実現する場所です。
「名前」と「バージョン」の2つの必須フィールドがあり、これらのプロパティを合わせて一意の識別子にする必要があります。
名前フィールドは、によって定義されている特定のルールに従う必要があります 命名に関するnpmドキュメント 、およびバージョンフィールドは semverの仕様 。
さらに、1マイルの長さの依存関係のリストを作成し、semverバージョンと範囲演算子を使用して、それぞれに使用する特定のバージョンを定義できます。その他の注目すべきプロパティのリストは次のとおりです。
「main」は、アプリケーションへのエントリポイントを定義します。デフォルトはindex.js
です。規則やフレームワークによっては、app.js
の場合があります。またはmain.js
。もちろん、好きなように作ることができます。
これは過小評価されているプロパティです。
まず、事前公開で何かを行うために使用できます。
次に、ビルドタスク(gulpまたはgruntで定義)、他の依存関係のインストールのトリガー(bowerなど)、webpackを使用した開発サーバーの起動など、頻繁に使用されるコマンドの配列をエイリアスできる場所を提供します。一連のbashコマンドを実行します。
このプロパティは、互換性のあるsemver番号とともに、アプリケーションに必要なパッケージのリストです。ローカルパッケージをインストールするときにターミナルから変更できるため、これは注目に値するプロパティです。
これは、--save
を追加することによって行われます。 (または省略形-S
)npm install
の終わりコマンド。
これを行うと、新しくインストールされたパッケージがpackage.json
の依存関係のリストに追加されます。ファイル。
同様に、--save
を追加することで依存関係を削除することもできます。 npm uninstall
を実行しているときコマンド。
各依存関係のsemverバージョン管理パターンとその意味を知っておくことが重要です。
semverルールが厳しすぎると、新機能や改善点を失うことになりますが、semverルールが緩和されすぎると、パッケージの破壊バージョンをラインに沿ってインストールできます。
壊れたパッケージのインストールは、特にパッケージの縮小バージョンが使用されている場合、解決が非常に難しいことが判明する可能性があります。
依存関係プロパティとは別に、「devDependencies」プロパティを使用すると、開発フェーズでのみ使用され、本番ビルドには必要のない依存関係を定義できます(ESLint、grunt-contribパッケージ、Protractorなど)。依存関係の場合と同様に、このプロパティは、--save-dev
を追加することで端末から変更できます。 (または省略形-D
)npm install
の終わりまでコマンドまたはnpm uninstall
コマンド。依存関係で説明したのと同じ注意がバージョン管理にも適用されます。
ここで、CLIユーティリティへのパスなど、パッケージの実行可能ファイルを指定できます。このプロパティは、パッケージのインストール時に実行可能ファイルへのローカルまたはグローバルシンボリックリンクを作成するようにnpmに指示します。
前に説明したように、ここでpackage.json
を使用して構成設定を定義します。ファイル。
trueに設定すると、npmはパッケージの公開を拒否します。
これをアクセス構成設定と混同しないでください。
これは、npmとそのpackage.json
を利用するプロジェクトがある場合に便利な設定です。ただし、スコープ付きまたはパブリックのいずれかで、npmレジストリに公開することは意図されていません。
意図が変わった場合は、設定をfalseに変更するだけで、パッケージを公開できるようになります。
package.json
名前がまだ定義または予約されていない限り、ファイルはカスタムプロパティも受け入れます。
npmエコシステムは、世界中の何千もの異なる開発者によって書かれたパッケージで満たされています。それぞれが何らかの問題を解決し、抽象化を提供したり、何かの実装を提示したりします。
ある時点で、あなたも共有する独自のパッケージを開発したいと思う可能性があります。
まず、package.json
を作成する必要があります「name」と「version」の最低限必要なプロパティを含むファイル、次に「main」プロパティを使用してエントリポイントを指定します(例:index.js)。
そのindex.jsファイルにコードを書き込むか、npmユーザーアカウントでログインするか、ターミナルから新しいユーザーを作成すると、npmレジストリに公開する準備が整います。
パッケージはパブリックまたはプライベートにすることができます。
公開パッケージは無料で公開でき、誰でも利用できます。
スコープパッケージと呼ばれるプライベートパッケージは、プライベートモジュールユーザーに支払いを行った場合にのみ公開でき、個別の@username/
で識別できます。これはパッケージ名の前に付けられます。
スコープパッケージは、publish
を呼び出すことで公開することもできます。 --access=public
を使用したコマンド。
さらに、パッケージのコードベースの拡張と改善にもう少し時間を費やし、新しいバージョンを公開するときが来た場合は、| _ +内のパッケージのバージョンを(semverの規則と規則に従って)変更するだけです。 _ |ファイルとタイプpackage.json
。
コマンドラインインターフェイスを使用してnpm publish
を呼び出すこともできます。ここで、update_typeは、semverで説明されているように、npm version
、patch
、またはminor
のいずれかであり、これにより、 major
のバージョン番号ファイル。
繰り返しますが、 npmドキュメント これは素晴らしいことであり、彼らの言葉を繰り返すだけでは無駄です。
npmのコンテキストで組織について言えることは、組織が非常にきめ細かく、正しく管理されている場合、1つの名前でスコープパッケージまたはパブリックパッケージに取り組んでいる大規模なチームや個人を非常に適切に管理および制限できることです。
習得するのは複雑ですが、非常にやりがいがあります。
最終的に、npmが提供するドキュメントは広範であり、詳細については参照する必要がありますが、この記事では、npmの素晴らしさを伝える、基本的な機能とより高度な関連機能の両方の有用な概要を提供します。
すべてのものと同様に、強い意見が存在し、多くの欠点を見つけることができます。ただし、npm(またはノード)を試したことがない場合は、飛び込んで自分で調べてください。思った以上に楽しめる可能性があります。
npmに関するより興味深い記事については、読むことを検討してください npmとBrowserifyでScala.jsを使用する 。