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


294

では角度成分ルータのドキュメント私はちょうど私が前に見たことがないと私は何が起こっているか理解していないNPMコマンドつまずきました:

npm install @angular/router --save

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

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

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

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


7
npm help scope
末尾のスラッシュ

3
@trailingslashそれは素晴らしい答えです!(コメントであってはなりません。)
限定的な贖罪

回答:


324

これは、「スコープパッケージ」と呼ばれるNPMの新機能であり、NPMパッケージの名前空間を効果的に設定できます。NPMのすべてのユーザーと組織には独自のスコープがあり、それらにパッケージを追加できるのは彼らだけです。

これはいくつかの理由で役立ちます:

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

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

詳細については、NPMのドキュメントAngularのドキュメントをご覧ください。

編集:それは、その表示されたパブリックスコープのパッケージは今の検索で正しく表示!


68

基本的に、npmには2つのタイプのモジュールがあります。

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

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

スコープ指定されたパッケージは、npm installで、@記号が前に付いた名前で参照してインストールされます。

npm install @myorg/mypackage

も参照

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.