2012-02-10 28 views
7

Tôi đang gặp vấn đề sau sự giới thiệu 'chính thức' để kiểm tra trong tất cả phụ thuộc vào bên ngoài git (điều http://www.mikealrogers.com/posts/nodemodules-in-git.html liên kết FAQ fron)NodeJS và NPM: vấn đề sau đây giới thiệu để kiểm tra các module vào git

  1. thế nào bạn đảm bảo rằng không chỉ phụ thuộc cấp cao nhất được đăng ký? Hầu hết các mô đun npm hiện không tuân theo khuyến nghị. Tất cả đều có node_modules của họ trong .gitignore. Chỉ cần xóa .gitignore của họ có vẻ nguy hiểm.

  2. Đối với mô đun được biên dịch, bài viết đề xuất chỉ đăng ký các nguồn và chạy 'npm rebuild' và triển khai thời gian. Thật không may 'npm rebuild' không thực hiện 'làm sạch' cho tất cả các mô-đun (mặc dù lỗi https://github.com/isaacs/npm/issues/1872 được bao gồm trong phiên bản npm 1.0.106 tôi đang sử dụng). Điều này có nghĩa là tôi phải ngăn các mục tiêu biên dịch không được kiểm tra (nếu không tôi sẽ có mã đối tượng được biên dịch cho máy phát triển trên máy sản xuất mà không bị ghi đè bởi npm rebuild). Nhưng: làm thế nào để tôi làm điều này? Thật không may các mô-đun không có một thư mục đầu ra biên dịch chung, vì vậy chỉ cần git-bỏ qua "node_modules//build" và "/ node_modules//out /" (như đã đề cập trong bài viết này eng.yammer.com/blog/ 2012/1/4/quản lý-nodejs-phụ thuộc-and-triển khai-at-yammer.html sẽ không giúp đỡ trong mọi trường hợp

phiên bản ngắn:. làm thế nào để bạn chắc chắn rằng máy chủ sản xuất sử dụng chính xác cùng một phiên bản của tất cả các mô-đun phụ thuộc khi bạn sử dụng trong quá trình phát triển?

+0

Tôi đã đăng một tập lệnh qua tại http://stackoverflow.com/questions/11351784/npm-clean-modules/13957364#13957364 có thể hữu ích. – theGecko

Trả lời

4

CẬP NHẬT: hiện có npm shrinkwrap giải quyết vấn đề khóa xuống các phiên bản phụ thuộc chính xác, ngay cả phụ thuộc 'phụ thuộc ies! More info here.

Kiểm tra trong node_modules có thể có vấn đề, vì môi trường mà nó đang chạy có thể không hoạt động trên một môi trường khác. Thêm vào đó, nó sẽ lấp đầy các thay đổi và kho lưu trữ của bạn với mã của bên thứ ba. Mà tôi lấy nó là sự liên kết bạn đã đến với phiên bản ngắn của câu hỏi, vì vậy hãy để tôi giải quyết điều đó.

Phiên bản ngắn: làm cách nào để đảm bảo rằng máy chủ sản xuất sử dụng cùng phiên bản chính xác của tất cả các mô-đun phụ thuộc khi bạn sử dụng trong quá trình phát triển?

Bên trong package.json, sẽ có dependencies: {}, nếu không có, sau đó thêm vào. Để thực hiện những gì bạn muốn, hãy thêm các phụ thuộc của bạn làm khóa và các phiên bản chính xác của chúng làm giá trị. Ví dụ. dependencies: { docpad: '2.5.0', mocha: '1.1.0' }

Tuy nhiên, nói chung (tùy thuộc vào tác giả) nâng cấp lên số sửa đổi (số x.x.X) chỉ là sửa lỗi và an toàn. Bạn có thể cho phép các thay đổi nhỏ bằng cách thực hiện dependencies: { docpad: '2.5.x', mocha: '1.1.x' } giúp bạn không phải cập nhật gói package.json của mình và thực hiện bản phát hành mỗi khi có bản phát hành lỗi. Bạn thậm chí có thể làm những việc như 2.x nếu muốn.

Đây là giải pháp tôi đã sử dụng cho tất cả các mô-đun của mình, vì nó đảm bảo rằng thậm chí 6 tháng sau hoặc bất kỳ mô-đun nào vẫn hoạt động - trong khi thực hiện điều gì đó như >= 2.0.0 có nghĩa là khi v3 phụ thuộc xuất hiện, mô-đun của bạn có thể sẽ không sử dụng được tại thời điểm đó. Đảm bảo bạn tuân thủ các phiên bản cụ thể "đảm bảo" ổn định theo thời gian.

For reference you can see how I've done it in my open-source node.js modules here

+0

Cảm ơn. Tôi đã thiết lập các phiên bản riêng biệt trong package.json như bạn đã mô tả. Nhưng điều này chỉ liên quan đến các phụ thuộc cấp cao nhất của tôi. Tôi không thể kiểm soát được sự phụ thuộc của các phụ thuộc. – dknaus

+0

Ohhhhh phải ... Một vài lần những gì tôi đã làm để chống lại điều đó là làm cho sự thay đổi phụ thuộc và nộp một yêu cầu kéo, và trong khi chờ đợi xuất bản hương vị của riêng bạn cho đến khi nó được chính thức sáp nhập. Ví dụ. thay đổi 'docpad' thành' docpad-bal' hoặc một cái gì đó, và tham khảo hương vị của riêng bạn trong dự án gốc. Khi nó được hợp nhất, hãy hủy xuất bản nó. – balupton

+0

Đã thêm một tham chiếu đến bản phát hành npm shrinkwrap vừa mới giải quyết vấn đề bạn đang nói về @ user1194821 – balupton

1

Về .gitignore phụ thuộc của bạn (trong "node_modules"), NPM 1.1 bỏ qua các tập tin .gitignore, do đó họ không được cài đặt;

npm 1.1 will exclude .gitignore files from the things it installs. 
npm 1.0 did not have this feature, so you have to be careful about that. 
Deleting them recursively is fine: 
    find node_modules -name .gitignore | xargs rm 
But, in npm 1.1, you never have to do this, because it excludes them 
from the install automatically. 

Đó là từ chính người đứng đầu (Isaac) và it's here và dường như bao gồm mọi thứ. Vấn đề "không liên quan" tôi phải là thứ gì đó ngớ ngẩn mà tôi đã làm, tôi sẽ thử thiết lập sạch sẽ.

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