Đổi tên mô-đun NPM đã xuất bản


94

Có cách nào để đổi tên mô-đun NPM đã được xuất bản không? Tôi muốn thay đổi tên của mô-đun của mình để khớp chính xác hơn với API mà nó hiển thị nhưng không muốn để những người đã cài đặt nó lúng túng.

Câu trả lời:


123

Không có bất kỳ cách tiếp xúc nào để làm điều đó. Khi tôi gặp phải điều này trong quá khứ, cách tiếp cận tôi đã thực hiện là:

npm không dùng nữa% ProjectName% @ "<= put-new-version-here" "CẢNH BÁO: Dự án này đã được đổi tên thành% NewProjectName%. Thay vào đó, hãy cài đặt bằng% NewProjectName%."

npm Ngừng hướng dẫn


18

Nói một cách đơn giản là không bạn không thể. Nhưng npm cung cấp cho bạn một giải pháp khác được gọi là npm deprecate.

Những gì nó làm là nó đánh dấu một phiên bản cụ thể hoặc các phạm vi phiên bản của gói đó là không được dùng nữa. Vì vậy, tiếp theo nếu ai đó cố gắng cài đặt gói này, họ sẽ nhận được một gói cảnh báo không được dùng nữa cùng với thông báo tùy chỉnh của bạn, trong đó bạn có thể dễ dàng chỉ định tên gói mới của mình.

Sử dụng:

npm deprecate my-package-name@"< latest-version" "your message"

Thông điệp của bạn có thể là bất kỳ thứ gì như:

WARNING: This project has been renamed to your-new-package-name. Install using new-package-name instead.

1
Có lẽ tốt hơn là sử dụng <=hơn là <để nó thông báo cho phiên bản mới nhất?
David Sherret

14

Trong vòng chưa đầy 24 giờ, tôi đã chạy lệnh sau để xóa gói sai.

npm unpublish <wrong package name> --force

Yeah, các công trình này nếu các gói đã vừa công bố (dưới 24 giờ)
Moso Akinyemi

10

Từ tài liệu:

Dữ liệu đăng ký là bất biến, có nghĩa là một khi được xuất bản, một gói không thể thay đổi. Chúng tôi làm điều này vì lý do bảo mật và ổn định của những người dùng phụ thuộc vào các gói đó.

Tuy nhiên, các gói mới được xuất bản - trong vòng 72 giờ - có thể được hủy xuất bản bằng cách chạy:

npm unpublish <package_name> -f

Thao tác này sẽ xóa gói khỏi sổ đăng ký NPM nếu gói được xuất bản cách đây chưa đầy 72 giờ . Sau đó, bạn có thể thay đổi tên gói của mình và xuất bản lại.

Thận trọng: Bạn cần đợi 24 giờ nếu cố xuất bản lại gói có cùng tên


8

Ai đó đã xây dựng một plugin npm nhỏ tiện dụng để thực hiện việc này một cách dễ dàng 😊

https://www.npmjs.com/package/@tiaanduplessis/pkg-rename

  1. Cài đặt gói bằng cách sử dụng npm -g install @tiaanduplessis/pkg-rename
  2. Đổi tên mô-đun npm của bạn trong tệp package.json và lưu nó
  3. chạy pkg-rename old-package-name

Từ tài liệu:

Thao tác này sẽ lấy phiên bản mới nhất của gói cũ từ npm và không dùng nữa cũng như tất cả các phiên bản đã xuất bản trước đó với thông báo:

WARNING: This project has been renamed to new-package-name. Install using new-package-name instead.

Bạn cũng có thể thêm --publishcờ để xuất bản tên gói mới như một phần của hành động tương tự.

pkg-rename old-package-name --publish

Hãy nhớ rằng, trước tiên hãy đổi tên gói trong package.json , sau đó chạy pkg-renamelệnh.


1
NPM nên có một khẩu hiệu mới: tiết kiệm javascript nhà phát triển thời gian như một dịch vụ
r3wt

1
lưu ý rằng pkg-rename không hoạt động nếu bạn đã bật 2FA với
npm

3

Tôi đã từng ở trong tình huống này. Tôi đã xuất bản một gói với tên bowser-or-nodethay vì browser-or-node.

Không có cách nào để đổi tên một gói, bạn phải ngừng sử dụng và xuất bản một gói mới.

Mặc dù có một lựa chọn khác. Nếu bạn vừa xuất bản gói của mình (chưa đầy 24 giờ kể từ thời điểm xuất bản) và nếu bạn chắc chắn rằng mình ổn với việc xóa gói và xuất bản gói mới với tên phù hợp, bạn có thể tiếp tục và thực hiện. Nhưng NPM sẽ không cho phép bạn xóa gói sau khi đã được 24 giờ kể từ thời điểm xuất bản.

May mắn thay, tôi đã phát hiện ra rằng tôi đã xuất bản với tên sai trong vòng chưa đầy 20 phút. Vì vậy, tôi vừa xóa và xuất bản lại với tên mới.


Thật thú vị, tôi đang cố gắng làm điều đó nhưng tôi nhận được thông báo "Tên gói quá giống với các gói hiện có" - mặc dù tôi vừa xóa cái cũ.
Steve Bennett

Ồ thực ra trong trường hợp của tôi, điểm giống nhau là với một gói khác, không phải gói cũ của tôi.
Steve Bennett

-1

Một điều kỳ diệu vừa xảy ra với tôi: Tôi đã đổi tên được một gói. Ban đầu nó được gọi là stdout-render, nhưng tôi đã thay đổi mọi trường hợp có thể xảy ra của tên và xuất bản lại nó sau khi không dùng tên gốc và thì nó hiển thị dưới tên mới (cli-artist) không được dùng trong danh sách mới cập nhật. Tôi không chắc sẽ thay đổi trường nào, nhưng tôi sẽ tưởng tượng nó nằm trong package.json bởi vì đó là trường duy nhất mà vỏ khớp trong trường hợp của tôi.

hy vọng rằng sẽ giúp!

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.