2014-12-31 15 views
5

Tôi có một dịch vụ mà tôi muốn cho phép người dùng vào thời gian cài đặt để xác định công cụ bền vững nào sử dụng, như dựa trên tệp, MongoDB hoặc Redis và tôi đang tìm kiếm một số ma thuật npm nơi bạn chỉ tải xuống các mô-đun cần thiết (không có, mongodb, hoặc redis, tương ứng).Tôi có thể chỉ định các phụ thuộc mô-đun tùy chọn trong npm package.json không?

Điều này có khả thi không? Tôi không thể tìm thấy bất kỳ tùy chọn nào khác ngoài việc xác định các phụ thuộc và devDependencies trong package.json, và điều đó không thích hợp cho việc này. Lưu ý rằng trong khi các mô-đun mongodb và redis có thể là tương đối nhỏ, hãy xem xét một trường hợp thay thế, nơi bạn có thể tùy chọn cần Java để giao tiếp RMI.

Cảm ơn!

+0

Có trường ['tùy chọnDependencies'] (https://docs.npmjs.com/files/package.json#optionaldependencies), nhưng đó không phải là những gì bạn đang tìm kiếm. – Scimonster

+0

Thực ra tôi nghĩ rằng sẽ đủ. Nếu một tùy chọn mongodb không cài đặt được vì không có trình biên dịch C++ hoặc nút-jmx tùy chọn bị lỗi vì không có JRE, thì điều đó là tốt. Ngoài ra tài liệu chỉ hiển thị mã JS, nhưng bạn có thể thêm '" optionalDependencies ": {}' vào package.json của bạn và nó hoạt động. Nếu bạn chỉnh sửa một cái gì đó xung quanh này vào câu trả lời của bạn tôi sẽ đánh dấu nó chính xác. – anthonyserious

Trả lời

2

Bạn có thể muốn sử dụng tập lệnh sau khi cài đặt, sau đó cài đặt chúng.

Bạn có thể cài đặt mọi thứ bằng cách sử dụng npm module theo chương trình.

Vì vậy, bạn có thể làm điều gì đó như thế này:

var npm = require('npm'); // make sure npm is in your package.json! 
npm.load({/* some object properties, if needed */}, function(err) { 
    if (err) {return handleError(err)} 
    if (usingMongoDB) { 
     npm.commands.install(['mongodb'], function(err){ 
     if (err) {return handleError(err)} 
     console.log('mongodb successfully installed'); 
    }); 
}); 

Bây giờ, tôi chưa bao giờ làm điều gì đó như thế này, vì vậy tôi khuyên bạn nên nhìn vào các tài liệu cho chương trình npm install, và cũng load.

+0

Thú vị. Chạy một kịch bản sau khi cài đặt có thể làm việc tất nhiên, nhưng tôi hy vọng cho một giải pháp một dòng. Tôi cũng cảm thấy kỳ lạ về việc tải xuống các gói từ bên trong một ứng dụng sau khi ứng dụng đó đã được triển khai. – anthonyserious

+0

Tôi không khuyên bạn sử dụng phương pháp này vì npm cảnh báo bạn không sử dụng api của nó: [_Mặc dù npm có thể được sử dụng theo lập trình, API của nó chỉ được sử dụng bởi CLI và không đảm bảo về hoạt động của nó cho bất kỳ mục đích nào khác. _] (https://github.com/npm/npm#using-npm-programmatically) Thay vào đó bạn có thể sử dụng [phương pháp này] (http://stackoverflow.com/a/17537559/516433) – Lucas

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