2012-06-26 45 views
52

npm cho phép chúng tôi chỉ định bundledDependencies nhưng lợi ích của việc làm như vậy là gì? Tôi đoán nếu chúng tôi muốn chắc chắn rằng chúng tôi có được phiên bản phù hợp ngay cả khi mô-đun chúng tôi tham chiếu bị xóa hoặc có thể có lợi ích về tốc độ với tính năng nhóm?Ưu điểm của gói phụ thuộc vào phụ thuộc bình thường trong NPM

Bất kỳ ai biết ưu điểm của gói phụ thuộc vào phụ thuộc bình thường?

Extract của bundledDependencies định nghĩa đây để tiện theo dõi:

bundledDependencies
Mảng tên gói phần mềm đó sẽ được đi kèm khi xuất bản gói.

Nếu điều này được viết "bundleDependencies", thì điều đó cũng đáng kính.

Ví dụ: bundledDependencies: ['foo', 'bar']

+12

'Nếu điều này được viết "bó phụ thuộc", thì điều đó cũng đáng kính.' Tài liệu tuyệt vời! –

+6

Tuy nhiên, bằng cách nào đó, sửa chữa nó để chỉ đọc "cũng được vinh danh" cảm thấy buồn. Ở một chỗ chật hẹp, nếu tôi ra lệnh cho một samurai hay hiệp sĩ trợ giúp, tôi chắc chắn muốn anh ta đi kèm với vũ khí và áo giáp tương thích - và đáng kính. –

+2

"Tôi đoán nếu chúng tôi muốn chắc chắn rằng chúng tôi có được phiên bản phù hợp ngay cả khi mô-đun chúng tôi tham chiếu bị xóa" đột nhiên mang rất nhiều trọng lượng: http://blog.npmjs.org/post/141577284765/kik-left- pad-and-npm – joews

Trả lời

33

Một trong những vấn đề lớn nhất hiện tại với Nút là tốc độ thay đổi. Điều này có nghĩa là hệ thống sản xuất có thể rất mong manh và một số npm update có thể dễ dàng phá vỡ mọi thứ.

Sử dụng gói phụ thuộc là cách để giải quyết vấn đề này bằng cách đảm bảo, khi bạn phỏng đoán chính xác, bạn sẽ luôn phân phối phụ thuộc chính xác cho dù điều gì khác có thể thay đổi.

Bạn cũng có thể sử dụng tính năng này để nhóm các gói riêng, riêng tư của bạn và phân phối chúng bằng bản cài đặt.

+0

Làm cách nào để luôn cung cấp phụ thuộc chính xác? Điều này có nghĩa là 'npm update' sẽ không ảnh hưởng đến bất kỳ phụ thuộc nào trong các gói phụ thuộc không? – Sawtaytoes

+1

Vâng, đúng. Lưu ý rằng các gói phụ thuộc có thể không "đúng" theo bất kỳ cách cơ bản nào. Họ chỉ là những gì người làm SAID bó là chính xác. –

+0

Bạn phải đùa tôi, câu trả lời này không có ý nghĩa gì cả! LMAO và được chấp thuận là đúng: D – Andy

20

Lợi thế khác là bạn có thể đặt phụ thuộc nội bộ của bạn (thành phần ứng dụng) ở đó và sau đó chỉ yêu cầu chúng trong ứng dụng của bạn như thể chúng là các mô-đun độc lập thay vì làm lộn xộn lib của bạn/và xuất bản chúng thành npm.

Nếu/khi chúng được trưởng thành đến mức chúng có thể sống dưới dạng mô-đun riêng biệt, bạn có thể dễ dàng đặt chúng trên npm mà không cần sửa đổi mã của bạn.

82

Đối với người đọc nhanh chóng: QA này là về lĩnh vực package.json bundledDependencies, không về package.

gì bundledDependencies làm

"bundledDependencies" là chính xác những gì tên của họ ngụ ý. Các phụ thuộc nên nằm trong dự án của bạn. Vì vậy, chức năng cơ bản giống như các phụ thuộc bình thường. Chúng cũng sẽ được đóng gói khi chạy npm pack.

Khi nào sử dụng chúng

Phụ thuộc thông thường thường được cài đặt từ đăng ký npm. phụ thuộc Như vậy đi kèm có thể hữu ích khi:

  • bạn muốn tái sử dụng một thư viện của bên thứ ba mà không đến từ registry NPM hoặc đã được sửa đổi
  • bạn muốn tái sử dụng các dự án riêng của bạn như module
  • bạn muốn phân phối một số tập tin với module của bạn

bằng cách này, bạn không cần phải tạo ra (và duy trì) kho NPM riêng của bạn, nhưng có được những lợi ích tương tự mà bạn nhận được từ các gói NPM.

Khi không để sử dụng phụ thuộc

Khi phát triển kèm, tôi không nghĩ rằng điểm chính là để ngăn chặn cập nhật tình cờ mặc dù. Chúng tôi có các công cụ tốt hơn cho điều đó, cụ thể là các kho lưu trữ mã (git, mercurial, svn ...) hoặc bây giờ là các tệp khóa.

Để ghim phiên bản gói, bạn có thể sử dụng:

  • OPTION1: Sử dụng NPM phiên bản mới hơn 5 mà đi kèm với nút 8. Nó sử dụng một tập tin package-lock.json (xem node blog và phát hành nút 8)

  • Option2: sử dụng yarn thay vì npm. Trình quản lý gói từ facebook, nhanh hơn npm và sử dụng tệp yarn.lock. Nó sử dụng cùng một cách package.json.

này được so sánh với lockfiles trong quản lý gói khác như Bundler hoặc Cargo. Nó giống với npm-shrinkwrap.json của npm, tuy nhiên nó không phải là mất dữ liệu và nó tạo ra kết quả có thể lặp lại.

npm thực sự đã sao chép tính năng đó từ yarn, trong số những thứ khác.

  • Option3: đây là cách tiếp cận được đề xuất trước đây, mà tôi không khuyên dùng nữa. Ý tưởng là sử dụng npm shrinkwrap hầu hết thời gian, và đôi khi đặt toàn bộ điều, bao gồm cả thư mục node_module, vào kho lưu trữ mã của bạn. Hoặc có thể sử dụng shrinkpack. Các phương pháp hay nhất vào thời điểm đó đã được thảo luận trên node.js blog và trên các trang web joyent developer.

cũng

Xem Đây là một chút bên ngoài phạm vi của câu hỏi, nhưng tôi muốn đề cập đến loại cuối cùng phụ thuộc (mà tôi biết): peer dependencies. Ngoài ra, hãy xem điều này related SO question và có thể là tài liệu của yarn trên bundledDependencies.

+4

Đây phải là câu trả lời được chấp nhận! – dolzenko

+6

"bao gồm thư mục node_module" - đó là một điều khá kỳ lạ gây ô nhiễm repo của bạn với mã được tạo ... đặc biệt là khi bạn đang làm việc với các mô-đun gốc ... – Oleksandr

+0

@Olexandr Giữa điều đó và mạo hiểm rằng một gói phá vỡ ứng dụng của bạn, tôi đoán sự lựa chọn rất dễ dàng. Lưu ý rằng bạn có thể đặt vào một nhánh riêng biệt (nếu sử dụng git chẳng hạn). Đồng ý, nó là xa một giải pháp lý tưởng. – nha

0

Hoạt động, tôi xem các gói phụ thuộc là kho lưu trữ mô-đun riêng của mô-đun, nơi phụ thuộc công khai hơn, được giải quyết giữa mô đun của bạn và phụ thuộc của nó (và phụ thuộc phụ). Mô-đun của bạn có thể dựa vào phiên bản cũ hơn, nói, phản ứng, nhưng phụ thuộc yêu cầu mới nhất và lớn nhất.Gói/cài đặt của bạn sẽ dẫn đến phiên bản được ghim trong node_modules/$yourmodule/node_modules/react, trong khi phụ thuộc của bạn sẽ nhận được phiên bản của chúng trong node_modules/react (hoặc node_modules/$dependency/node_modules/react nếu chúng nghiêng).

Thông báo trước: Gần đây tôi đã gặp phải sự phụ thuộc không cấu hình đúng đắn sự phụ thuộc của nó đối với phản ứng và có phản ứng trong góiDependencies khiến mô-đun phụ thuộc bị lỗi khi chạy.

Các vấn đề liên quan