Apa arti dari awalan "at" (@) pada paket npm?

294

Dalam dokumentasi Angular Component Router saya hanya menemukan perintah npm yang belum pernah saya lihat sebelumnya dan saya tidak mengerti apa yang sedang terjadi:

npm install @angular/router --save

Apa artinya @angular/router?

Apakah seluruh string nama paket? Tapi kemudian saya tidak menemukan paket itu ketika saya menggunakan pencarian di npmjs.com . Dan juga pencarian commandline tidak mengembalikan paket seperti itu:

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

Jadi, apakah @angular/semacam mekanisme awalan di npm? Dan bagaimana cara kerjanya?

jbandi
sumber
7
npm help scope
Trailing slash
3
@ Trailingslash Itu jawaban yang bagus! (seharusnya tidak menjadi komentar.)
Kurban Tebusan Terbatas

Jawaban:

324

Ini adalah fitur baru dari NPM yang disebut 'paket scoped', yang secara efektif memungkinkan paket NPM untuk di-namespace. Setiap pengguna dan organisasi di NPM memiliki cakupannya sendiri, dan mereka adalah satu-satunya orang yang dapat menambahkan paket ke dalamnya.

Ini berguna karena beberapa alasan:

  • Ini memungkinkan organisasi untuk memperjelas paket mana yang 'resmi' dan mana yang tidak.
    • Misalnya, jika suatu paket memiliki cakupan @angular, Anda tahu itu diterbitkan oleh tim inti Angular.
  • Nama paket hanya harus unik dengan cakupannya yang dipublikasikan, bukan seluruh registri.
    • Sebagai contoh, nama paket httpsudah diambil di repositori utama, tetapi Angular juga bisa memilikinya @angular/http.

Alasan mengapa paket scoped tidak muncul dalam pencarian publik adalah karena banyak dari mereka adalah paket pribadi yang dibuat oleh organisasi yang menggunakan layanan berbayar NPM, dan mereka tidak nyaman membuka pencarian sampai mereka benar-benar yakin mereka tidak akan membuat publik apa pun yang tidak boleh publik - dari perspektif hukum, ini cukup dimengerti.

Untuk informasi lebih lanjut, lihat NPM docs dan Angular docs .

EDIT: Tampaknya paket lingkup publik sekarang muncul dengan benar dalam pencarian!

Joe Clay
sumber
68

Pada dasarnya ada dua jenis modul pada npm, yaitu -

  • Modul global - ini adalah modul yang mengikuti konvensi penamaan yang ada saat ini. Anda require('foo')dan ada banyak yang bersukacita. Mereka dimiliki oleh satu atau lebih orang melalui npm install XYZperintah.

  • Modul tercakup - ini adalah modul baru yang "dicakup" di bawah nama organisasi yang dimulai dengan @nama organisasi, garis miring dan akhirnya nama paket, mis @someOrgScope/packagename. Lingkup adalah cara pengelompokan paket terkait, dan juga memengaruhi beberapa hal tentang cara npm memperlakukan paket.

Paket scoped diinstal dengan merujuknya dengan nama, didahului dengan simbol @, di npm install:

npm install @myorg/mypackage

Lihat juga

Pardeep Jain
sumber