2015-06-05 31 views
16

Có thể cài đặt npm gói chỉ khi nó chưa được đã được cài đặt?Chỉ có thể cài đặt gói npm nếu nó chưa được cài đặt?

Tôi cần điều này để tăng tốc kiểm tra trên CircleCI, nhưng khi tôi chạy npm install [email protected] v.v. nó luôn tải xuống mọi thứ và cài đặt chúng từ scracth, tuy nhiên, thư mục node_modules với tất cả các mô-đun đã có mặt tại thời điểm chạy lệnh (được lưu trong bộ nhớ cache từ bản dựng trước đó) và protractor --version v.v. hiển thị phiên bản cần thiết của gói.

hoàn hảo của nó để có một số lệnh một dòng như thế này:

protractor --version || npm install -g [email protected] 

nhưng một trong đó cũng sẽ kiểm tra phiên bản của gói.

+0

'[đường -d/to/protractor] || npm cài đặt ... '? – bishop

+3

'lệnh -v thước đo>/dev/null 2> & 1 || npm cài đặt ... '? – bishop

+0

Tôi cần phiên bản kiểm tra của gói hiện được cài đặt, tốt nhất là không viết đường dẫn đầy đủ đến gói. nhiều môi trường khác nhau, đường dẫn khác nhau, v.v. – kovpack

Trả lời

17

với bash bạn có thể làm

[ $(node -p "require('protractor/package.json').version") != "2.1.0" ] && npm install [email protected] 
+0

Hoàn hảo! Thanx! – kovpack

+4

Gần như hoàn hảo, vì nó vừa được bật ra. Nó ném ngoại lệ nếu gói không có mặt. – kovpack

7

phiên bản Chức năng của tuyệt vời answer by @JeromeWAGNER:

function install_package_if_needed() { 
    local p=${1:-Package required} 
    local v=${2:-Version required} 
    shift 2 
    local i=$(node -p "require('$p/package.json').version" 2>/dev/null) 
    [ "$i" == "$v" ] || npm "[email protected]" install "[email protected]$v" 
} 

Sử dụng như:

$ install_package_if_needed protractor 2.1.0 

Để vượt qua tùy chọn bổ sung để npm, xác định chúng sau phiên bản, như vậy:

$ install_package_if_needed protractor 2.1.0 -g 
+0

Yeap, thanx. Tôi đã làm một cái gì đó như thế này, nhưng được gọi là nhiều lệnh hệ thống từ ruby. Nhưng chính xác phiên bản này không áp dụng cho nhiệm vụ của tôi. – kovpack

+0

Cảm ơn vì điều này. Nhưng cần phải xóa>/dev/null else $ i sẽ luôn trống. –

+0

@DarylTeo Cảm ơn! Bạn đúng. Không chắc tôi đang nghĩ gì. Đã sửa! – bishop

0

Tôi đã gặp vấn đề này cùng với mong muốn cài đặt các phụ thuộc toàn cầu từ bất kỳ tệp "package.json" nào yêu cầu chúng.

Đây là một môi trường phát triển Windows.

Here is my solution.

2
[ $(node -p "try{require('protractor/package.json').version}catch(e){}") != "2.1.0" ] && npm install grunt 
3

Bạn có thể thử npm list protractor || npm install [email protected]

đâu npm list protractor được sử dụng để tìm protractor gói.

Nếu gói không được tìm thấy, nó sẽ trở lại npm ERR! code 1 và làm cho việc lắp đặt npm install [email protected]

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