2012-07-12 32 views
15

Kiểm tra trong node_module là tiêu chuẩn cộng đồng nhưng bây giờ chúng tôi cũng có một tùy chọn để sử dụng shrinkwrap. Sau này có ý nghĩa hơn với tôi nhưng luôn luôn có cơ hội mà một người nào đó đã "lực lượng xuất bản" và giới thiệu một lỗi. Có bất kỳ hạn chế bổ sung nào không?Kiểm tra trong node_modules so với shrinkwrap

Trả lời

16

bài ưa thích của tôi/triết lý về vấn đề này đi tất cả các cách trở lại (một thời gian dài trong đất Node.js) đến năm 2011:

https://web.archive.org/web/20150116024411/http://www.futurealoof.com/posts/nodemodules-in-git.html

Để trích dẫn trực tiếp:

Nếu bạn có một ứng dụng, mà bạn triển khai, kiểm tra tất cả các phụ thuộc của bạn vào node_modules. Nếu bạn sử dụng npm để triển khai, chỉ xác định bundleDependencies cho các mô-đun đó. Nếu bạn có các phụ thuộc cần được biên dịch, bạn vẫn nên kiểm tra mã và chỉ cần chạy lại $ npm khi triển khai.

Mọi người tôi đã nói điều này cũng cho tôi biết tôi là một thằng ngốc và sau đó một vài tuần sau đó nói với tôi rằng tôi đã đúng và kiểm tra node_modules trong git đã là một phước lành cho việc triển khai và phát triển. Đó là khách quan tốt hơn, nhưng đây là một số câu hỏi/khiếu nại tôi dường như nhận được.

Tôi nghĩ đây vẫn là lời khuyên tốt nhất.

Kịch bản xuất bản lực là rất hiếm và npm shrinkwrap có thể sẽ phù hợp với hầu hết mọi người. Nhưng nếu bạn đang triển khai một môi trường sản xuất, không có gì mang lại cho bạn sự an tâm như kiểm tra trong toàn bộ thư mục node_modules.

Cách khác, nếu bạn thực sự, thực sự không muốn để kiểm tra trong thư mục node_modules nhưng muốn có một sự bảo đảm tốt hơn vẫn chưa có một sự thúc đẩy cưỡng bức, tôi muốn làm theo những lời khuyên trong npm help shrinkwrap:

Nếu bạn muốn tránh bất kỳ rủi ro nào mà tác giả byzantine thay thế một gói bạn đang sử dụng với mã phá vỡ ứng dụng của bạn, bạn có thể sửa đổi tệp shrinkwrap để sử dụng tham chiếu URL git thay vì số phiên bản để npm luôn lấy tất cả các gói từ git.

Tất nhiên, ai đó có thể chạy lạ git rebase hoặc điều gì đó và sửa đổi git commit băm ... nhưng bây giờ chúng tôi mới phát điên.

+1

Tính đến hôm nay liên kết bị phá vỡ (500 lỗi) vì vậy đây là một [lưu trữ] (https://gist.github.com/3854887) (gist.github. com/3854887) của bài đăng đó. – Sukima

+0

@Sukima Tôi tin rằng liên kết đã hoạt động trở lại. – Kostia

+1

Nếu tác giả loại bỏ các gói của họ, điều này xảy ra, thì 'shrinkwrap' sẽ không giúp ích gì. –

2

NPM FAQ trực tiếp trả lời này:

  • Kiểm tra node_modules vào git cho những thứ bạn triển khai, chẳng hạn như các trang web và ứng dụng.
  • Không kiểm tra node_modules thành git cho thư viện và mô-đun dự định được sử dụng lại.
  • Sử dụng npm để quản lý các phụ thuộc trong môi trường dev của bạn, nhưng không phải trong tập lệnh triển khai của bạn.

trích dẫn từ npm FAQ

+3

Ngay cả Câu hỏi thường gặp cũng có thể thay đổi. Nó bây giờ đọc: "Đối với các gói bạn triển khai, chẳng hạn như các trang web và ứng dụng, bạn nên sử dụng npm shrinkwrap để khóa cây phụ thuộc đầy đủ của bạn". – Johann

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