2012-03-13 34 views
6

Tôi có câu hỏi về các phương pháp hay nhất trong việc quản lý các phụ thuộc lồng nhau của npm.npm quản lý phụ thuộc lồng nhau

Hãy để tôi giải thích tình huống của mình và vui lòng cho tôi biết tôi đang làm gì sai hoặc cách tốt nhất để tiếp cận điều này là gì.

Tôi đang chạy một ứng dụng bằng cách sử dụng express.js và express-mongostore trong nút nodeenv. Bởi vì nodeenv, tôi đang npm-ing tất cả mọi thứ trên toàn cầu để tất cả chúng đi theo thư mục nenv/lib/node_modules. Vấn đề là, tôi đang cố gắng để phát triển ra chảy máu cạnh express.js trong khi express-mongostore đã không được cập nhật trong một thời gian. Sau khi cài đặt cả hai mô-đun, tôi nhận được cấu trúc thư mục này.

nodeenv/lib/node_modules/express/node_modules/connect/.. 
          /
          /connect-mongodb/node_modules/ connect/... 

Vì vậy, điều cuối cùng xảy ra là tôi có 2 phiên bản kết nối khác nhau.

Tôi bị cháy vì cookie được tạo bởi cửa hàng mongodb và cookie được tạo bởi phần mềm trung gian phiên khác nhau vì chúng trỏ đến 2 triển khai utils kết nối khác nhau (gọi là cửa hàng gọi utils và các cuộc gọi khác trực tiếp. , chúng trỏ đến các tệp khác nhau trong khi yêu cầu độ phân giải). Sự khác biệt thực sự ở đây là họ đăng nhập cookie bằng các thuật toán khác nhau. Trong một thời gian, các phiên của tôi đã vô hiệu hóa bản thân mỗi lần tải trang và tôi mất một thời gian dài để gỡ lỗi xuống cấp này.

Tôi đã đọc trên Internets và có vẻ như đây được cho là cách npm và một điều tốt. Vấn đề ở đây là kể từ khi thể hiện dựa trên một loạt các utils trong kết nối và kết nối-mongodb thừa hưởng một số các lớp học tương tự trong kết nối, có chúng được repos khác nhau là có vấn đề.

Tôi hiện vẫn có 2 phiên bản kết nối và tôi đã vá một phiên bản giống như phiên bản khác. Rõ ràng đây không phải là giải pháp bền vững. Làm thế nào tôi nên tiến hành và tiếp cận quản lý phụ thuộc trong trường hợp này?

Cảm ơn trước!

Trả lời

3

Bạn có thể chạy npm dedupe để di chuyển các phụ thuộc tương thích lên trên cây. Vì vậy, giả sử rằng express và connect-mongodb có thể hoạt động với cùng một phiên bản kết nối, bạn sẽ kết thúc bằng một cây như sau:

nodeenv/lib/node_modules/express/... 
          /
          /connect-mongodb/... 
          /
          /connect/... 
-3

Bạn đang gặp phải sự không tương thích cơ bản giữa hai mô-đun cho rằng họ có thể hợp tác với nhau.

Đây không phải là lỗi của NPM hoặc thiếu sót trong thiết kế của nó. Bạn sẽ cần tự mình giải quyết vấn đề logic.

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