npm
Il s'agit d'un registre NPM résilient aux pannes au processus de réplication d'index Algolia. Il répliquera tous les packages npm sur un index Algolia et le maintiendra à jour. L'état de la réplication est enregistré dans les paramètres de l'index Algolia.
La réplication doit toujours être en cours d'exécution. Une seule instance par index Algolia doit s'exécuter en même temps . Si le processus échoue, redémarrez-le et le processus de réplication continuera au dernier point dont il se souvient.
L'index Algolia est actuellement utilisé, gratuitement, par quelques projets sélectionnés (ex : Yarnpkg.com, codesandbox.io, jsdelivr.com, etc...).
Si vous souhaitez inclure cet index à votre projet, veuillez créer une demande de support ici : Algolia Support.
Ce produit est un produit open source pour la communauté et non pris en charge par Algolia.
Pour être éligible, votre projet doit répondre à ces exigences :
Vous pouvez également utiliser le code ou l'image Docker publique pour exécuter la vôtre (à partir de septembre 2021, elle créera environ 3 millions d'enregistrements x4).
Pour chaque package NPM, nous créons un enregistrement dans l'index Algolia. Les enregistrements résultants ont le schéma suivant :
{
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
] ,
} ,
}
Si vous souhaitez en savoir plus sur le fonctionnement de l'algorithme de classement d'Algolia, vous pouvez lire cet article de blog.
Nous limitons la recherche à l'utilisation d'un sous-ensemble d'attributs uniquement :
_popularName
name
description
keywords
owner.name
owners.name
Algolia fournit des capacités de recherche de préfixe par défaut (faire correspondre les mots avec uniquement le début). Ceci est désactivé pour les attributs owner.name
et owners.name
.
Algolia fournit une tolérance de faute de frappe par défaut.
En utilisant la fonctionnalité optionalFacetFilters
d'Algolia, nous améliorons les correspondances exactes sur le nom d'un package pour être toujours au top des résultats.
Pour chaque package, nous utilisons le nombre de téléchargements au cours des 30 derniers jours comme paramètre customRanking
d'Algolia. Ceci sera utilisé pour trier les résultats ayant la même pertinence textuelle les uns par rapport aux autres.
Par exemple, recherchez babel
avec la correspondance à la fois babel-core
et babel-messages
. D'un point de vue textuel, ces 2 packages correspondent exactement de la même manière. Dans ce cas, Algolia s'appuiera sur le paramètre customRanking
et placera donc en premier le package avec le plus grand nombre de téléchargements au cours des 30 derniers jours.
Certains packages seront considérés comme populaires s'ils ont été téléchargés "plus" que d'autres. Nous considérons actuellement qu'un package est populaire s'il :
0.005%
du nombre total de téléchargements npm, Ce drapeau popular
est également utilisé pour améliorer certains records par rapport à d'autres non populaires.
yarn
apiKey=... yarn start
Pour recommencer à partir d'un point particulier (ou depuis le début) :
seq=0 apiKey=... yarn start
Ceci est utile lorsque vous souhaitez resynchroniser complètement le registre npm car :
seq
représente une séquence de changement dans le jargon CouchDB.
Notre objectif avec ce projet est de :
Lorsque le processus démarre avec seq=0
:
La réplication et la surveillance sont séparées car :
Voir CONTRIBUTION.md