新專案管理
這是一個故障復原 npm 註冊表到 Algolia 索引複製過程。它將所有 npm 套件複製到 Algolia 索引並保持最新。複製的狀態保存在 Algolia 索引設定中。
複製應該始終運行。每個 Algolia 索引只能同時執行一個實例。如果該過程失敗,請重新啟動它,複製過程將在它記住的最後一點繼續。
Algolia 索引目前由一些選定的項目免費使用(例如:yarnpkg.com、codesandbox.io、jsdelivr.com 等)。
如果您想將此索引包含到您的專案中,請在此處建立支援請求:Algolia 支援。
該產品是社區的開源產品,不受 Algolia 支援。
要符合資格,您的專案必須滿足以下要求:
您也可以使用程式碼或公用 docker 映像來執行您自己的映像(截至 2021 年 9 月,它將建立約 300 萬筆記錄 x4)。
對於每個 NPM 包,我們都會在 Algolia 索引中建立一筆記錄。產生的記錄具有以下架構:
{
name : 'babel-core' ,
downloadsLast30Days : 10978749 ,
downloadsRatio : 0.08310651682685861 ,
humanDownloadsLast30Days : '11m' ,
jsDelivrHits : 11684192 ,
popular : true ,
version : '6.26.0' ,
versions : {
// [...]
'7.0.0-beta.3' : '2017-10-15T13:12:35.166Z' ,
} ,
tags : {
latest : '6.26.0' ,
old : '5.8.38' ,
next : '7.0.0-beta.3' ,
} ,
description : 'Babel compiler core.' ,
dependencies : {
'babel-code-frame' : '^6.26.0' ,
// [...]
} ,
devDependencies : {
'babel-helper-fixtures' : '^6.26.0' ,
// [...]
} ,
repository : {
url : 'https://github.com/babel/babel/tree/master/packages/babel-core' ,
host : 'github.com' ,
user : 'babel' ,
project : 'babel' ,
path : '/tree/master/packages/babel-core' ,
branch : 'master' ,
} ,
readme : '# babel-corenn> Babel compiler core.nnn [... truncated at 200kb]' ,
owner : {
// either GitHub owner or npm owner
name : 'babel' ,
avatar : 'https://github.com/babel.png' ,
link : 'https://github.com/babel' ,
} ,
deprecated : 'Deprecated' , // This field will be removed, please use `isDeprecated` instead
isDeprecated : true ,
deprecatedReason : 'Deprecated' ,
isSecurityHeld : false , // See https://github.com/npm/security-holder
badPackage : false ,
homepage : 'https://babeljs.io/' ,
license : 'MIT' ,
keywords : [
'6to5' ,
'babel' ,
'classes' ,
'const' ,
'es6' ,
'harmony' ,
'let' ,
'modules' ,
'transpile' ,
'transpiler' ,
'var' ,
'babel-core' ,
'compiler' ,
] ,
created : 1424009748555 ,
modified : 1508833762239 ,
lastPublisher : {
name : 'hzoo' ,
email : '[email protected]' ,
avatar : 'https://gravatar.com/avatar/851fb4fa7ca479bce1ae0cdf80d6e042' ,
link : 'https://www.npmjs.com/~hzoo' ,
} ,
owners : [
{
email : '[email protected]' ,
name : 'thejameskyle' ,
avatar : 'https://gravatar.com/avatar/8a00efb48d632ae449794c094f7d5c38' ,
link : 'https://www.npmjs.com/~thejameskyle' ,
} ,
// [...]
] ,
lastCrawl : '2017-10-24T08:29:24.672Z' ,
dependents : 3321 ,
types : {
ts : 'definitely-typed' , // definitely-typed | included | false
definitelyTyped : '@types/babel__core' ,
} ,
moduleTypes : [ 'unknown' ] , // esm | cjs | none | unknown
styleTypes : [ 'none' ] , // file extensions like css, less, scss or none if no style files present
humanDependents : '3.3k' ,
changelogFilename : null , // if babel-core had a changelog, it would be the raw GitHub url here
objectID : 'babel-core' ,
// the following fields are considered internal and may change at any time
_downloadsMagnitude : 8 ,
_jsDelivrPopularity : 5 ,
_popularName : 'babel-core' ,
_searchInternal : {
alternativeNames : [
// alternative versions of this name, to show up on confused searches
] ,
} ,
}
如果您想了解有關 Algolia 排名演算法如何運作的更多信息,您可以閱讀這篇文章。
我們將搜尋限制為僅使用屬性的子集:
_popularName
name
description
keywords
owner.name
owners.name
Algolia 提供預設的前綴搜尋功能(僅符合開頭的單字)。對於owner.name
和owners.name
屬性停用此功能。
Algolia 提供預設的拼字錯誤容忍度。
使用 Algolia 的optionalFacetFilters
功能,我們可以增強套件名稱的精確匹配,以便始終位於結果的頂部。
對於每個包,我們使用過去 30 天內的下載次數作為 Algolia 的customRanking
設定。這將用於對彼此具有相同文字相關性的結果進行排序。
例如,搜尋babel
並符合babel-core
和babel-messages
。從文字相關性的角度來看,這兩個包以相同的方式完全匹配。在這種情況下,Algolia 將依賴customRanking
設置,因此將過去 30 天內下載次數最多的軟體包放在前面。
如果某些軟體包比其他軟體包下載“更多”,則它們將被視為受歡迎。目前,如果滿足以下任一條件,我們認為某個軟體包很受歡迎:
0.005%
以上,這個popular
標誌也用於提高一些記錄而不是非流行的記錄。
yarn
apiKey=... yarn start
若要從特定點(或從頭開始)重新啟動:
seq=0 apiKey=... yarn start
當您想要完全重新同步 npm 註冊表時,這非常有用,因為:
seq
表示 CouchDB 術語中的更改序列。
我們這個計畫的目標是:
當進程以seq=0
開始時:
複製和監視是分開的,因為:
請參閱 CONTRIBUTING.md