npm
Dies ist ein ausfallsicherer NPM-Registry-zu-Algolia-Indexreplikationsprozess. Es repliziert alle npm-Pakete in einen Algolia-Index und hält ihn auf dem neuesten Stand. Der Status der Replikation wird in den Algolia-Indexeinstellungen gespeichert.
Die Replikation sollte immer ausgeführt werden. Es darf jeweils nur eine Instanz pro Algolia-Index gleichzeitig ausgeführt werden . Wenn der Prozess fehlschlägt, starten Sie ihn neu und der Replikationsprozess wird an der letzten Stelle fortgesetzt, an die er sich erinnert.
Der Algolia-Index wird derzeit von einigen ausgewählten Projekten kostenlos verwendet (z. B. Yarnpkg.com, codesandbox.io, jsdelivr.com usw.).
Wenn Sie diesen Index in Ihr Projekt einbinden möchten, erstellen Sie bitte hier eine Supportanfrage: Algolia Support.
Dieses Produkt ist ein Open-Source-Produkt für die Community und wird von Algolia nicht unterstützt.
Um förderfähig zu sein, muss Ihr Projekt die folgenden Anforderungen erfüllen:
Sie können den Code oder das öffentliche Docker-Image auch verwenden, um Ihr eigenes Image auszuführen (ab September 2021 werden ca. 3 Millionen Datensätze x4 erstellt).
Für jedes einzelne NPM-Paket erstellen wir einen Eintrag im Algolia-Index. Die resultierenden Datensätze haben das folgende Schema:
{
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
] ,
} ,
}
Wenn Sie mehr über die Funktionsweise des Ranking-Algorithmus von Algolia erfahren möchten, können Sie diesen Blogbeitrag lesen.
Wir beschränken die Suche auf die Verwendung einer Teilmenge der Attribute:
_popularName
name
description
keywords
owner.name
owners.name
Algolia bietet standardmäßige Präfixsuchfunktionen (Übereinstimmung von Wörtern, die nur den Anfang haben). Dies ist für die Attribute owner.name
und owners.name
deaktiviert.
Algolia bietet standardmäßig eine Tippfehlertoleranz.
Mit der optionalFacetFilters
-Funktion von Algolia steigern wir die exakte Übereinstimmung mit dem Namen eines Pakets, um bei den Ergebnissen immer den Überblick zu behalten.
Für jedes Paket verwenden wir die Anzahl der Downloads in den letzten 30 Tagen als customRanking
Einstellung von Algolia. Dies wird verwendet, um die Ergebnisse mit gleicher Textrelevanz gegeneinander zu sortieren.
Suchen Sie beispielsweise nach babel
, wobei sowohl babel-core
als auch babel-messages
übereinstimmen. Aus textlicher Sicht stimmen diese beiden Pakete exakt auf die gleiche Weise überein. In einem solchen Fall verlässt sich Algolia auf die Einstellung customRanking
und platziert daher das Paket mit der höchsten Anzahl an Downloads in den letzten 30 Tagen an erster Stelle.
Einige Pakete gelten als beliebt, wenn sie „häufiger“ heruntergeladen wurden als andere. Wir betrachten ein Paket derzeit als beliebt, wenn es entweder:
0.005%
der Gesamtzahl der NPM-Downloads, Diese popular
Flagge wird auch verwendet, um einige Rekorde gegenüber unpopulären zu verbessern.
yarn
apiKey=... yarn start
So starten Sie von einem bestimmten Punkt aus (oder von vorne):
seq=0 apiKey=... yarn start
Dies ist nützlich, wenn Sie die npm-Registrierung vollständig neu synchronisieren möchten, weil:
seq
stellt eine Änderungssequenz im CouchDB-Jargon dar.
Unser Ziel mit diesem Projekt ist:
Wenn der Prozess mit seq=0
beginnt:
Replizieren und Beobachten sind getrennt, weil:
Siehe CONTRIBUTING.md