例如,我有一個用于 elasticsearch 的驅動程式和模塊串列,它們是使用此驅動程式構建的。大約有 800 個模塊。
有沒有辦法按流行度或下載量對這個串列進行排序,這樣我就可以找到最常用的依賴包?我想這將有助于找到基于本機驅動程式的有用庫或 ODM。
我發現了幾個基于社區 npm 的統計資訊,但我永遠不會看到類似的東西。
uj5u.com熱心網友回復:
你可以像這樣運行一些腳本。它基本上是獲取所有依賴項,然后為每個依賴項獲取分數。
const pkg = "@elastic/elasticsearch";
const dependents = [];
const fetchAll = async (offset = 0) => {
const res = await fetch(
`https://www.npmjs.com/browse/depended/${pkg}?offset=${offset}`,
{ headers: { "x-spiferack": "1" }, method: "GET" }
);
const data = await res.json();
dependents.push(...data.packages);
if (data.hasNext) await fetchAll(offset data.paginationSize);
};
const main = async () => {
await fetchAll();
const result = await Promise.all(
dependents.map(async ({ name }) => {
const res = await fetch(
`https://registry.npmjs.com/-/v1/search?text=${name}&size=1`
);
const data = await res.json();
return { name, score: data.objects[0]?.score };
})
);
// console.log(JSON.stringify(result));
// TODO: sort then display your result here
};
main();
排序前result看起來像這樣:
[
{
"name": "winston-elasticsearch",
"score": {
"final": 0.3617392174769229,
"detail": {
"quality": 0.5468432882273897,
"popularity": 0.23232512016539603,
"maintenance": 0.3324926827166212
}
}
},
{
"name": "mongoosastic",
"score": {
"final": 0.3562854605860561,
"detail": {
"quality": 0.5583413799576047,
"popularity": 0.2060467998060229,
"maintenance": 0.3333333333333333
}
}
},
// ...
]
請注意,這是一種 hack(使用 NPM 的內部 API 并過度搜索注冊表),NPM 可能會拋出一些錯誤,例如請求過多或連接超時,特別是如果您的包數量太多,并且您沒有冷卻(您可以在這里實作它,或者通過更改我使用的邏輯Promise.all或使用got已經具有此類功能的邏輯)。
此外,這些 API 端點似乎不夠一致(就像家屬只給了約 400 個條目,@elastic/elasticsearch而在網站上顯示約 800 分,而得分一并沒有給出某些包的分數,盡管它應該)。您最好使用一些類似的服務npms.io來正確驗證(并快取)結果。該方法將是相似的,并且非常易于實施。
NPM 上也有某些軟體包已經/曾經這樣做過。在這里查看它們,看看它們是否正常作業。
除了/-/v1/searchhack,您還可以https://www.npmjs.com/package/${name}使用"x-spiferack": "1"header 獲取。但它只會給你下載計數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/479421.html
標籤:npm
