Ý nghĩa của tiền tố tại thời điểm trên (@) trên các gói npm là gì?


294

Trong tài liệu Bộ định tuyến thành phần góc, tôi chỉ vấp phải một lệnh npm mà tôi chưa từng thấy trước đây và tôi không hiểu chuyện gì đang xảy ra:

npm install @angular/router --save

Ý nghĩa của là @angular/routergì?

Là toàn bộ chuỗi một tên gói? Nhưng sau đó tôi không tìm thấy gói đó khi tôi sử dụng tìm kiếm trên npmjs.com . Và cũng là tìm kiếm dòng lệnh không trả về gói nào như vậy:

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

Vì vậy, @angular/một số loại cơ chế tiền tố trong npm? Và làm như thế nào?


7
npm help scope
dấu gạch chéo

3
@trailingslash Đó là một câu trả lời tuyệt vời! (không nên bình luận.)
Sự chuộc tội có giới hạn

Câu trả lời:


324

Đây là một tính năng mới của NPM được gọi là 'các gói có phạm vi', cho phép các gói NPM được đặt tên một cách hiệu quả. Mỗi người dùng và tổ chức trên NPM đều có phạm vi riêng và họ là những người duy nhất có thể thêm các gói vào đó.

Điều này hữu ích vì nhiều lý do:

  • Nó cho phép các tổ chức làm rõ các gói nào là 'chính thức' và gói nào không.
    • Ví dụ: nếu một gói có phạm vi @angular, bạn biết rằng nó được xuất bản bởi nhóm nòng cốt Angular.
  • Tên gói chỉ phải là duy nhất cho phạm vi được xuất bản, không phải toàn bộ sổ đăng ký.
    • Ví dụ, tên gói httpđã được lấy trong kho chính, nhưng Angular cũng có thể có @angular/http.

Lý do các gói có phạm vi không xuất hiện trong tìm kiếm công khai là vì rất nhiều trong số chúng là các gói riêng được tạo bởi các tổ chức sử dụng dịch vụ trả phí của NPM và họ không thoải mái mở tìm kiếm cho đến khi họ có thể hoàn toàn chắc chắn rằng họ không sẽ làm cho mọi thứ trở nên công khai mà không nên công khai - từ góc độ pháp lý, điều này khá dễ hiểu.

Để biết thêm thông tin, hãy xem tài liệu NPMtài liệu Angular .

EDIT: Dường như các gói phạm vi công cộng hiện hiển thị đúng trong tìm kiếm!


68

Về cơ bản có hai loại mô-đun trên npm, chúng là -

  • Các mô-đun toàn cầu - đây là các mô-đun tuân theo quy ước đặt tên tồn tại ngày nay. Bạn require('foo')và có rất nhiều niềm vui. Họ được sở hữu bởi một hoặc nhiều người thông qua npm install XYZlệnh.

  • Module scoped - đây là những module mới được "scoped" dưới một cái tên tổ chức đó bắt đầu với một @tên của tổ chức, một dấu gạch chéo và cuối cùng là tên gói, ví dụ @someOrgScope/packagename. Phạm vi là một cách để nhóm các gói liên quan lại với nhau và cũng ảnh hưởng đến một số điều về cách npm xử lý gói.

Một gói phạm vi được cài đặt bằng cách tham chiếu nó theo tên, trước một @ -symbol, trong cài đặt npm:

npm install @myorg/mypackage

Xem thêm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.