2016-02-12 115 views
21

通常一個bower.json文件指定了一些依賴關係,但這些文件通常表達爲允許使用一系列的bower軟件包版本(例如>=1.0,這意味着任何高於版本1.0的版本)。如何找出實際安裝的涼亭包的版本?

我有一個自動化的過程,需要找到什麼版本的涼亭包是實際安裝現在在這個系統上。

如何以編程方式(只是版本本身),理想情況下使用標準的Unix命令行工具/ bower命令找到它?

bower info <thepackagename>顯示這一點 - 它顯示了什麼是當前可從涼亭庫(例如,即使我做bower info apackageIdonthaveinstalled它仍然會顯示一個包含版本號的有效的JSON結構)的信息。

cat bower_components/thepackagename/bower.json | node_modules/json/lib/json.js version適用於某些軟件包(假設安裝了npm軟件包json),但不是全部(例如jquery 2.2.0的bower軟件包不包含bower.json)。

回答

6

最好的辦法,現在我發現,這似乎爲每個包我遇到工作至今,是:

cat bower_components/thepackagename/.bower.json | node_modules/json/lib/json.js version

(注意.bower.json額外.)。

看起來bower會在.bower.json中存儲一些關於已安裝軟件包的元數據,其中包括已安裝的版本。

我來了這麼遠的最好的是:

bower list | grep jquery | perl -pe 's/.*jquery#(.*?) .*$/$1/' 

(如果,例如,我感興趣的是包得jquery)。

這對於各種各樣的原因很醜陋:

  • 我要重複包名(雖然這也許可以改善 一個更好的Perl腳本,它太過濾線,我只是懶)。

  • bower list獲取有關所有已安裝軟件包的信息,而不僅僅是我感興趣的軟件包 - 其餘信息將被丟棄。

  • bower list似乎需要互聯網連接來檢查註冊表,否則它會失敗。

有興趣看看這是否可以改善,特別是最後一點。

23

這裏有一個grep命令這樣做: grep "version\"\:" bower_components/thepackagename/.bower.json

此外,一個命令來查看所有亭子組件的版本爲項目 - 這個列表可以是一個方便的CI假象: grep "version\"\:" bower_components/*/.bower.json enter image description here

+1

如問題所述,這對於不包含'bower.json'的軟件包不起作用。 –

+1

請注意額外。在.bower.json;) 所以這個命令基本上和你使用的一樣,只是它不依賴於'json'包,它顯示了當前包的* all * bower依賴關係的版本。 –

+1

這個工作比接受的答案好得多 – Aron

5

你有沒有嘗試過「bower list --json = 0 --offline」。

它會列出所有涼亭包信息。

+1

'bower list'對我來說是正確的答案 –