web-dev-qa-db-ja.com

npmパッケージの「at」(@)プレフィックスの意味は何ですか?

Angular Component Router documentation で、今まで見たことのないnpmコマンドにつまずいただけで、何が起こっているのかわかりません:

npm install @angular/router --save

@angular/routerの意味は何ですか?

文字列全体がパッケージ名ですか?しかし、 npmjs.com で検索を使用すると、そのパッケージが見つかりません。また、コマンドライン検索ではそのようなパッケージは返されません。

npm search @angular/router
:No match found for "@angular/router"

それでは、@angular/はnpmの何らかのプレフィックスメカニズムですか?そして、それはどのように機能しますか?

166
jbandi

これは、「スコープ付きパッケージ」と呼ばれるNPMの新機能であり、NPMパッケージのネームスペースを効果的に許可します。 NPM上のすべてのユーザーと組織には独自のスコープがあり、パッケージを追加できるのは彼らだけです。

これはいくつかの理由で便利です。

  • 組織は、どのパッケージが「公式」で、どのパッケージが「公式」ではないかを明確にすることができます。
    • たとえば、パッケージのスコープが@angularである場合、Angularコアチームによって発行されたことがわかります。
  • パッケージ名は、レジストリ全体ではなく、発行されたスコープに対して一意である必要があります。
    • たとえば、パッケージ名httpはメインリポジトリで既に使用されていますが、Angularには@angular/httpも含めることができます。

スコープパッケージがパブリック検索に表示されない の理由は、それらの多くがNPMの有料サービスを使用している組織によって作成されたプライベートパッケージであり、可能な限り検索を開くのが難しいためです。彼らが公にすべきでないものを公にしないことを完全に確信してください-法的観点から、これはかなり理解できる。

詳細については、 NPM docs および Angular docs を参照してください。

EDIT:パブリックスコープパッケージが検索で適切に表示されるようになりました!

176
Joe Clay

基本的に、npmには2種類のモジュールがあります。

  • グローバルモジュール-これらは、今日存在する命名規則に従っているモジュールです。あなたはrequire('foo')と多くの喜びがあります。 npm install XYZコマンドを使用して、1人以上のユーザーが所有しています。

  • スコープモジュール-これらは、@で始まる組織名、スラッシュ、そして最後にパッケージ名で「スコープ化」される新しいモジュールです。 @someOrgScope/packagename。スコープは、関連するパッケージをグループ化する方法であり、npmがパッケージを処理する方法に関するいくつかのことにも影響します。

スコープ付きパッケージは、npm installで@記号が前に付いた名前で参照することによりインストールされます。

npm install @myorg/mypackage

また見なさい

44
Pardeep Jain