2013-05-13 39 views
209

Chúng tôi cần phải tích hợp runner thử nghiệm Karma vào TeamCity và cho rằng tôi muốn cung cấp cho sys-kỹ sư kịch bản nhỏ (PowerShell hoặc bất kỳ) sẽ:NPM và cập nhật gói nếu cần

  1. nhặt mong muốn số phiên bản từ một số tập tin cấu hình (tôi đoán tôi có thể đặt nó như là một quyền bình luận trong karma.conf.js)

  2. kiểm tra nếu phiên bản định nghĩa của Á hậu nghiệp cài đặt trong repo toàn cầu NPM của

  3. nếu nó không phải, hoặc bản thân phiên bản dẫn cũ hơn mong muốn: nhặt về và cài đặt phiên bản đúng

  4. chạy nó: karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

Vì vậy, câu hỏi thực sự của tôi là: "làm thế nào có thể một kiểm tra trong một kịch bản, nếu phiên bản mong muốn của gói cài đặt ? ". Bạn có nên kiểm tra hay an toàn để chỉ gọi npm -g install mọi lúc?

Tôi không muốn luôn luôn kiểm tra và cài đặt phiên bản mới nhất hiện có, bởi vì giá trị cấu hình khác có thể trở nên không tương thích

Trả lời

282

Để kiểm tra xem bất kỳ thành phần trong một dự án là 'cũ' bạn nên làm:

npm outdated

'lỗi thời' sẽ kiểm tra tất cả các mô-đun được định nghĩa trong package.json và xem nếu có một phiên bản mới hơn trong đăng ký NPM.

Dưới đây là một ví dụ, cho thấy rằng xml2js (đó là trong node_modules/trong thư mục hiện tại) là lỗi thời, bởi vì một phiên bản mới hơn tồn tại (0.2.7):

[email protected] node_modules/xml2js current=0.2.6 

Nếu bạn muốn kiểm tra cho module cũ và cài đặt phiên bản mới hơn thì bạn có thể làm: npm update (đối với tất cả các module) hoặc npm update xml2js (chỉ kiểm tra/cập nhật xml2js)

Có một cái nhìn tại các tài liệu NPM:

+2

Hãy cẩn thận với 'npm update' đặc biệt là với' npm update -g' ... nó không phải những gì hầu hết các peaole mong đợi nó để làm! Xem: https://github.com/npm/npm/issues/6247 và https://gist.github.com/othiym23/4ac31155da23962afd0e – jbandi

+2

@jbandi Kể từ [email protected], 'npm -g update' là an toàn để sử dụng lại. https://github.com/npm/npm/issues/6247#issuecomment-92182814 –

+0

Xin lưu ý rằng cập nhật npm sẽ không cập nhật tệp package.json của bạn như được nêu trong câu trả lời từ @Erik Olson. –

2

Khi cài đặt gói NPM (cả trên toàn cầu hay địa phương), bạn có thể định nghĩa một phiên bản cụ thể bằng cách sử dụng cú pháp @version để xác định phiên bản sẽ được cài đặt.

Nói cách khác, làm: npm install -g [email protected] sẽ đảm bảo rằng chỉ 0.9.2 được cài đặt và sẽ không cài đặt lại nếu nó đã tồn tại.

Là một lời khuyên, tôi khuyên bạn nên tránh cài đặt npm toàn cầu ở bất cứ nơi nào bạn có thể. Nhiều người không nhận ra rằng nếu một phụ thuộc định nghĩa một tệp bin, nó sẽ được cài đặt vào ./node_modules/.bin/. Thông thường, rất dễ sử dụng phiên bản cục bộ của mô-đun đã cài đặt được định nghĩa trong package.json của bạn. Trên thực tế, các kịch bản lệnh npm sẽ thêm ./node_modules/.bin vào đường dẫn của bạn.

Ví dụ, đây là một package.json, khi tôi chạy npm install && npm test sẽ cài đặt phiên bản nghiệp được định nghĩa trong package.json của tôi và sử dụng phiên bản nghiệp đó (được cài đặt tại node_modules/.bin/karma) khi chạy kịch bản test:

{ 
"name": "myApp", 
"main": "app.js", 
"scripts": { 
    "test": "karma test/*", 
}, 
"dependencies": {...}, 
"devDependencies": { 
    "karma": "0.9.2" 
} 
} 

này mang đến cho bạn những lợi ích của package.json bạn xác định phiên bản của nghiệp sử dụng và không cần phải giữ cấu hình trên toàn cầu vào hộp CI của bạn.

+0

chữ gì trong tập lệnh 'test'? Bạn có thể vui lòng cho tôi biết cách bạn cài đặt nó bằng tập lệnh hay không. – Agzam

+0

Nhìn vào package.json. Trong thuộc tính "scripts", bạn có thể định nghĩa thuộc tính khác, "test" có giá trị là lệnh bạn muốn chạy khi bạn gõ 'npm test'. Tài liệu npm là khá tốt ở đây: https://npmjs.org/doc/scripts.html – addisonj

215

npm outdated sẽ xác định các gói cần được cập nhật và npm update <package name> có thể được sử dụng để cập nhật từng gói. Nhưng npm update <package name> sẽ không cập nhật các phiên bản trong package.json của bạn.

Các quy trình làm việc tốt nhất là:

  1. Xác định ra các gói cập nhật
  2. Cập nhật các phiên bản trong package.json bạn
  3. Run npm update để cài đặt các phiên bản mới nhất của từng gói

Kiểm tra npm-check-updates để trợ giúp quy trình làm việc này.

  • Install npm-check-updates
  • Run npm-check-updates để liệt kê những gì gói hết hạn (về cơ bản được điều tương tự như chạy npm outdated)
  • Run npm-check-updates -u để cập nhật tất cả các phiên bản trong package.json của bạn (đây là sự kỳ diệu sauce)
  • Run npm update như bình thường để cài đặt các phiên bản mới của gói của bạn dựa trên package.json cập nhật
+1

điều này là tuyệt vời, npm-check-updates chỉ là những gì tôi đã tìm kiếm, tahnks – Hoto

+1

'npm lỗi thời' sẽ hiển thị TẤT CẢ các gói .. ngay cả bên trong các gói khác .. nhưng chúng sẽ không được cập nhật với quy trình này để chúng luôn luôn xuất hiện .. vì vậy chỉ cần sử dụng 'npm-check-updates' (như bạn thực sự đề nghị) mà chỉ hiển thị các gói chính từ' package.json' ... điều này có liên quan – davidhq

+0

Nó thực sự là một công cụ tốt. Cảm ơn. :) – aps120797

109

Ngoài ra còn có một "tươi" module gọi npm-check:

NPM-kiểm tra

Kiểm tra phụ thuộc đã lỗi thời, không chính xác, và không sử dụng.

enter image description here

Nó cũng cung cấp một cách tương tác thuận tiện để cập nhật các phụ thuộc.

+0

Đây là một tiện ích tuyệt vời.Tôi đang sử dụng nó mọi lúc! Đáng tin cậy hơn là chính bản thân npm! – skiabox

+0

Sẽ tốt hơn nếu tiện ích hỗ trợ kiểu số – Charlie

32
  • Để cập nhật một gói địa phương duy nhất:

    1. Đầu tiên tìm ra các gói lỗi thời của bạn:

      npm outdated

    2. Sau đó cập nhật các gói hoặc gói mà bạn muốn thủ công như:

      npm update --save package_name

Bằng cách này nó không phải là cần thiết để cập nhật địa phương package.json tập tin của bạn.

Lưu ý rằng điều này sẽ cập nhật gói của bạn lên phiên bản mới nhất.

  • Nếu bạn viết một số phiên bản trong tập tin package.json của bạn và làm:

    npm update package_name

    Trong trường hợp này bạn sẽ nhận được chỉ là phiên bản ổn định tiếp theo (muốn) về phiên bản mà bạn đã viết trong tệp package.json của bạn.

Và với npm list (package_name) bạn có thể tìm hiểu phiên bản hiện tại của gói địa phương.

+2

Đây là câu trả lời hoàn hảo. Quá dễ.Các giải pháp bình chọn cao hơn tất cả các đề nghị cài đặt một mô-đun để cập nhật, tôi không thích điều đó. Tôi đang tìm giải pháp đơn giản này. Đặc biệt là làm rõ của bạn rằng chúng tôi sẽ nhận được phiên bản được liệt kê trong cột "Wanted" của 'npm lỗi thời, cảm ơn bạn! – Noitidart

10

Một bước đơn giản:

$ npm i -g npm-check-updates && ncu -a && npm i

Đó là tất cả. Tất cả các phiên bản gói trong package.json sẽ là phiên bản mới nhất.

+8

Giải thích những bước này sẽ tốt cho việc giảm thiểu mọi người chỉ sao chép và dán những thứ mà không hề biết họ đang làm gì một cách mù quáng. Cố gắng giáo dục cũng như hướng dẫn. –

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