npm
これは、障害に強い npm レジストリから Algolia インデックスへのレプリケーション プロセスです。すべての npm パッケージを Algolia インデックスに複製し、最新の状態に保ちます。レプリケーションの状態は、Algolia インデックス設定に保存されます。
レプリケーションは常に実行されている必要があります。 Algolia インデックスごとに 1 つのインスタンスのみを同時に実行する必要があります。プロセスが失敗した場合は、プロセスを再起動すると、レプリケーション プロセスは記憶されている最後のポイントから続行されます。
Algolia インデックスは現在、いくつかの選ばれたプロジェクト (yarnpkg.com、codesandbox.io、jsdelivr.com など) によって無料で使用されています。
このインデックスをプロジェクトに含めたい場合は、ここでサポート リクエストを作成してください: Algolia Support。
この製品はコミュニティ向けのオープンソース製品であり、Algolia ではサポートされていません。
資格を得るには、プロジェクトが次の要件を満たしている必要があります。
コードまたはパブリック Docker イメージを使用して独自の 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-core
とbabel-messages
両方に一致するbabel
を検索します。テキストの関連性の観点から見ると、これら 2 つのパッケージは同じように正確に一致します。このような場合、Algolia はcustomRanking
設定に依存するため、過去 30 日間でダウンロード数が最も多かったパッケージが最初に配置されます。
一部のパッケージは、他のパッケージよりも「多く」ダウンロードされた場合に人気があると見なされます。現在、次のいずれかの場合にパッケージが人気があると見なされます。
0.005%
を超えており、このpopular
フラグは、人気のないものよりもいくつかの記録を押し上げるためにも使用されます。
yarn
apiKey=... yarn start
特定の時点から (または最初から) 再開するには:
seq=0 apiKey=... yarn start
これは、次の理由から npm レジストリを完全に再同期する場合に便利です。
seq
CouchDB 用語での変更シーケンスを表します。
このプロジェクトの目標は次のとおりです。
プロセスがseq=0
で開始される場合:
レプリケートとウォッチが分離されている理由は次のとおりです。
COTRIBUTING.md を参照してください。