Remplacé par classic-level . Veuillez consulter les questions fréquemment posées.
db = leveldown(location)db.open([options, ]callback)optionsdb.close(callback)db.put(key, value[, options], callback)optionsdb.get(key[, options], callback)optionsdb.getMany(keys[, options][, callback])db.del(key[, options], callback)optionsdb.batch(operations[, options], callback) (formulaire de tableau)db.batch() (forme enchaînée)db.approximateSize(start, end, callback)db.compactRange(start, end, callback)db.getProperty(property)db.iterator([options])db.clear([options, ]callback)chainedBatchchainedBatch.put(key, value)chainedBatch.del(key)chainedBatch.clear()chainedBatch.write([options, ]callback)chainedBatch.dbiteratorfor await...of iteratoriterator.next([callback])iterator.seek(key)iterator.end([callback])iterator.dbleveldown.destroy(location, callback)leveldown.repair(location, callback) Ce module faisait à l'origine partie du levelup mais a été extrait plus tard et sert désormais de liaison autonome pour le niveaudb.
Il est fortement recommandé d'utiliser levelup de préférence au leveldown sauf si vous avez des raisons de performance mesurables pour le faire. levelup est optimisé pour la convivialité et la sécurité. Bien que nous travaillions pour améliorer la sécurité de l'interface leveldown , il est toujours facile de planter votre processus de nœud si vous ne faites pas les choses de la bonne manière.
Voir la section sur la sécurité ci-dessous pour plus de détails sur les opérations connues dangereuses avec leveldown .
Nous visons à prendre en charge au moins les versions LTS et Node.js actuelles, Electron 5.0.0, ainsi que toutes les futures versions Node.js et Electron grâce à N-API. La version de nœud minimum pour leveldown est 10.12.0 . Inversement, pour Node> = 12, la version minimale leveldown est 5.0.0 .
Le forfait NPM leveldown NPM est expédié avec des binaires préconçus pour les plates-formes populaires 64 bits ainsi que les ARM, M1, Android et Alpine (MUSL) et est connu pour travailler sur:
Lors de l'installation leveldown , node-gyp-build vérifiera si un binaire compatible existe et se replit à une étape de compilation si ce n'est pas le cas. Dans ce cas, vous aurez besoin d'une installation node-gyp valide.
Si vous ne souhaitez pas utiliser le binaire prédéfini pour la plate-forme sur laquelle vous installez, spécifiez l'indicateur --build-from-source lorsque vous installez. Un des:
npm install --build-from-source
npm install leveldown --build-from-source
Si vous travaillez sur leveldown lui-même et que vous souhaitez recompiler le code C ++, exécutez npm run rebuild .
leveldown > = 5. Cela peut être vérifié en exécutant npm ls leveldown .leveldown à> = 5.3.0, soit utiliser --build-from-source .--build-from-source . Ce n'est plus le cas.nodejs-mobile . Si vous améliorez: veuillez consulter UPGRADING.md .
db = leveldown(location) Renvoie une nouvelle instance leveldown . location est une chaîne pointant vers l'emplacement de niveaudb à ouvrir.
db.open([options, ]callback) Ouvrez le magasin. La fonction callback sera appelée sans arguments lorsque la base de données a été ouverte avec succès, ou avec un seul argument error si l'opération ouverte a échoué pour une raison quelconque.
options L'argument options facultatifs peut contenir:
createIfMissing (boolean, par défaut: true ): si true , initialise une base de données vide à l'emplacement spécifié si l'on n'existe pas déjà. Si false et une base de données n'existe pas, vous recevrez une erreur dans votre rappel open() et votre base de données ne s'ouvrira pas.
errorIfExists (booléen, par défaut: false ): Si true , vous recevrez une erreur dans votre rappel open() si la base de données existe à l'emplacement spécifié.
compression (boolean, par défaut: true ): si true , toutes les données compressibles seront exécutées via l'algorithme de compression Snappy avant d'être stocké. Snappy est très rapide et ne devrait pas gagner beaucoup de vitesse en désactivant, alors laissez-le, sauf si vous avez de bonnes raisons de l'éteindre.
cacheSize (nombre, par défaut: 8 * 1024 * 1024 = 8 Mo): la taille (en octets) du cache LRU en mémoire avec un contenu en blocs non compressé fréquemment utilisé.
Options avancées
Les options suivantes concernent le réglage avancé des performances. Modifiez-les uniquement si vous pouvez prouver un avantage réel pour votre application particulière.
writeBufferSize (numéro, par défaut: 4 * 1024 * 1024 = 4 Mo): la taille maximale (en octets) du journal (en mémoire et stocké dans le fichier .log sur le disque). Au-delà de cette taille, LevelDB convertira les données de journal au premier niveau de fichiers de table triés. À partir de la documentation de niveau:Des valeurs plus élevées augmentent les performances, en particulier pendant les charges en vrac. Jusqu'à deux tampons d'écriture peuvent être maintenus en mémoire en même temps, vous pouvez donc ajuster ce paramètre pour contrôler l'utilisation de la mémoire. En outre, un tampon d'écriture plus grand entraînera un temps de récupération plus long de la prochaine fois que la base de données sera ouverte.
blockSize (numéro, par défaut 4096 = 4k): la taille approximative des blocs qui composent les fichiers de table. La taille liée aux données non compressées (d'où "approximative"). Les blocs sont indexés dans le fichier de table et les looks d'entrée impliquent la lecture d'un bloc entier et l'analyse pour découvrir l'entrée requise.
maxOpenFiles (numéro, par défaut: 1000 ): le nombre maximum de fichiers que le niveaudb est autorisé à s'ouvrir à la fois. Si votre magasin de données est susceptible d'avoir un grand ensemble de travail, vous pouvez augmenter cette valeur pour empêcher le désabonnement des descripteurs de fichiers. Pour calculer le nombre de fichiers requis pour votre jeu de travail, divisez vos données totales par 'maxFileSize' .
blockRestartInterval (numéro, par défaut: 16 ): le nombre d'entrées avant de redémarrer le "codage delta" des touches dans les blocs. Chaque point "redémarrage" stocke la clé complète de l'entrée, entre les redémarrages, le préfixe commun des clés pour ces entrées est omis. Les redémarrages sont similaires au concept d'images clés dans le codage vidéo et sont utilisés pour minimiser la quantité d'espace requise pour stocker les clés. Ceci est particulièrement utile lorsque vous utilisez un espacement de noms / préfixage profond dans vos clés.
maxFileSize (numéro, par défaut: 2* 1024 * 1024 = 2MB): la quantité maximale d'octets à écrire dans un fichier avant de passer à un nouveau. À partir de la documentation de niveau:
... Si votre système de fichiers est plus efficace avec des fichiers plus grands, vous pouvez envisager d'augmenter la valeur. L'inconvénient sera des compactions plus longues et donc des hoquets de latence / performance plus longs. Une autre raison d'augmenter ce paramètre peut être lorsque vous remplissez initialement une grande base de données.
db.close(callback) close() est une méthode d'instance sur un objet de base de données existant. La base de données LevelDB sous-jacente sera fermée et la fonction callback sera appelée sans arguments si l'opération est réussie ou avec un seul argument error si l'opération a échoué pour une raison quelconque.
leveldown attend que toutes les opérations en attente se terminent avant la fermeture. Par exemple:
db . put ( 'key' , 'value' , function ( err ) {
// This happens first
} )
db . close ( function ( err ) {
// This happens second
} )db.put(key, value[, options], callback)Stockez une nouvelle entrée ou écrasez une entrée existante.
Les objets key et value peuvent être des chaînes ou des tampons. D'autres types d'objets sont convertis en chaînes avec la méthode toString() . Les clés peuvent ne pas être null ou undefined et les objets convertis avec toString() ne doivent pas entraîner de cordes vides. Les valeurs peuvent ne pas être null ou undefined . Les valeurs de '' , [] et Buffer.alloc(0) (et tout objet résultant en un toString() de l'un d'eux) sera stocké sous forme de tableau de caractères de longueur zéro et sera donc récupéré en tant que '' ou Buffer.alloc(0) en fonction du type demandé.
Un ensemble plus riche de types de données est pris en charge dans levelup .
options La seule propriété actuellement disponible sur l'objet options est sync (booléen, par défaut: false ) . Si vous fournissez une valeur sync de true dans votre objet options , le niveaudb effectuera une écriture synchrone sur les données; Bien que l'opération sera asynchrone en ce qui concerne le nœud. Normalement, LevelDB transmet les données au système d'exploitation pour l'écriture et renvoie immédiatement, mais une écriture synchrone utilisera fsync() ou équivalent afin que votre rappel ne soit déclenché que tant que les données ne seront pas réellement sur le disque. Les écritures de système de fichiers synchrones sont nettement plus lentes que les écritures asynchrones, mais si vous voulez être absolument sûr que les données sont rincées, vous pouvez utiliser { sync: true } .
La fonction callback sera appelée sans arguments si l'opération est réussie ou avec un seul argument error si l'opération a échoué pour une raison quelconque.
db.get(key[, options], callback) Obtenez une valeur de la boutique NIVEALDB par key .
L'objet key peut être une chaîne ou un tampon et ne peut pas être undefined ou null . D'autres types d'objets sont convertis en chaînes avec la méthode toString() et la chaîne résultante peut ne pas être une longueur zéro. Un ensemble plus riche de types de données est pris en charge dans levelup .
Valeurs récupérées via get() qui sont stockées sous forme de tableaux de caractères de longueur zéro ( null , undefined , '' , [] , Buffer.alloc(0) ) reviendra en tant que vide- String ( '' ) ou Buffer.alloc(0) lorsqu'il est récupéré avec asBuffer: true (voir ci-dessous).
options L'objet options facultatifs peut contenir:
asBuffer (booléen, par défaut: true ): utilisé pour déterminer s'il faut renvoyer la value de l'entrée en tant que chaîne ou tampon. Notez que la conversion d'un tampon en une chaîne entraîne un coût, donc si vous avez besoin d'une chaîne (et que la value peut légitimement devenir une chaîne UTF8), vous devez la récupérer comme une avec { asBuffer: false } et vous éviterez ce coût de conversion.fillCache (Boolean, par défaut: true ): LevelDB remplira par défaut le cache LRU en mémoire avec des données d'un appel à obtenir. La désactivation est effectuée en définissant fillCache sur false . La fonction callback sera appelée avec une seule error si l'opération a échoué pour une raison quelconque, y compris si la clé n'a pas été trouvée. En cas de succès, le premier argument sera null et le deuxième argument sera la value en tant que chaîne ou tampon en fonction de l'option asBuffer .
db.getMany(keys[, options][, callback]) Obtenez plusieurs valeurs du magasin par un tableau de keys . L'objet options optionnels peut contenir asBuffer et fillCache , comme décrit dans get() .
La fonction callback sera appelée avec une Error si l'opération a échoué pour une raison quelconque. En cas de succès, le premier argument sera null et le deuxième argument sera un tableau de valeurs avec le même ordre que keys . Si une clé n'a pas été trouvée, la valeur pertinente ne sera undefined .
Si aucun rappel n'est fourni, une promesse est retournée.
db.del(key[, options], callback) Supprimer une entrée. L'objet key peut être une chaîne ou un tampon et ne peut pas être undefined ou null . D'autres types d'objets sont convertis en chaînes avec la méthode toString() et la chaîne résultante peut ne pas être une longueur zéro. Un ensemble plus riche de types de données est pris en charge dans levelup .
options La seule propriété actuellement disponible sur l'objet options est sync (booléen, par défaut: false ) . Voir db.put() pour plus de détails sur cette option.
La fonction callback sera appelée sans arguments si l'opération est réussie ou avec un seul argument error si l'opération a échoué pour une raison quelconque.
db.batch(operations[, options], callback) (formulaire de tableau) Effectuez plusieurs opérations de put et / ou del en vrac. L'argument operations doit être un Array contenant une liste d'opérations à exécuter séquentiellement, bien que dans son ensemble, ils soient effectués comme opération atomique.
Chaque opération est contenue dans un objet ayant les propriétés suivantes: type , key , value , où le type est 'put' ou 'del' . Dans le cas de 'del' la propriété value est ignorée.
Toutes les entrées où la key ou value (dans le cas de 'put' ) est null ou undefined entraînera le renvoi d'une erreur sur le callback . Toutes les entrées où le type est 'put' qui a une value de [] , '' ou Buffer.alloc(0) sera stocké sous forme de tableau de caractères de longueur zéro et donc récupérer pendant les lectures comme '' ou Buffer.alloc(0) selon la façon dont ils sont demandés. Voir levelup pour la documentation complète sur la façon dont cela fonctionne dans la pratique.
L'argument options facultatifs peut contenir:
sync (booléen, par défaut: false ). Voir db.put() pour plus de détails sur cette option. La fonction callback sera appelée sans arguments si le lot est réussi ou avec une Error si le lot a échoué pour une raison quelconque.
db.batch() (forme enchaînée) Renvoie une nouvelle instance chainedBatch .
db.approximateSize(start, end, callback) approximateSize() est une méthode d'instance sur un objet de base de données existant. Utilisé pour obtenir le nombre approximatif d'octets d'espace du système de fichiers utilisés par la plage [start..end) . Le résultat peut ne pas inclure de données récemment écrites.
Les paramètres start et end peuvent être des chaînes ou des tampons représentant des clés dans le magasin de niveau DB.
La fonction callback sera appelée avec une seule error si l'opération a échoué pour une raison quelconque. En cas de succès, le premier argument sera null et le deuxième argument sera la taille approximative en tant que nombre.
db.compactRange(start, end, callback) compactRange() est une méthode d'instance sur un objet de base de données existant. Utilisé pour déclencher manuellement un compactage de base de données dans la plage [start..end) .
Les paramètres start et end peuvent être des chaînes ou des tampons représentant des clés dans le magasin de niveau DB.
La fonction callback sera appelée sans arguments si l'opération est réussie ou avec un seul argument error si l'opération a échoué pour une raison quelconque.
db.getProperty(property) getProperty peut être utilisé pour obtenir des détails internes de niveaudb. Lorsqu'il est émis avec une chaîne de propriété valide, une chaîne lisible sera renvoyée (cette méthode est synchrone).
Actuellement, les seules propriétés valides sont:
leveldb.num-files-at-levelN : renvoie le nombre de fichiers au niveau n , où n est un entier représentant un niveau valide (par exemple "0").
leveldb.stats : renvoie une chaîne multi-lignes décrivant des statistiques sur le fonctionnement interne de LevelDB.
leveldb.sstables : renvoie une chaîne multi-lignes décrivant toutes les SSTABLES qui composent le contenu de la base de données actuelle.
db.iterator([options]) Renvoie une nouvelle instance iterator . Accepte les options de plage suivantes:
gt (supérieur à), gte (supérieur ou égal) définit la limite inférieure de la plage à itérer. Seules les entrées où la clé est supérieure à (ou égale à) cette option sera incluse dans la plage. Lorsque reverse=true l'ordre sera inversé, mais les entrées itérées seront les mêmes.lt (inférieur), lte (inférieur ou égal) définit la limite supérieure de la plage à itérer. Seules les entrées où la clé est inférieure (ou égale à) cette option sera incluse dans la plage. Lorsque reverse=true l'ordre sera inversé, mais les entrées itérées seront les mêmes.reverse (booléen, par défaut: false ) : Iréatiser les entrées dans l'ordre inverse. Méfiez-vous qu'une recherche inverse peut être plus lente qu'une recherche vers l'avant.limit (nombre, par défaut: -1 ) : limitez le nombre d'entrées collectées par cet itérateur. Ce nombre représente un nombre maximum d'entrées et ne peut pas être atteint si vous arrivez d'abord à la fin de la plage. Une valeur de -1 signifie qu'il n'y a pas de limite. Lorsque reverse=true les entrées avec les clés les plus élevées seront retournées au lieu des clés les plus basses. En plus des options de plage, iterator() prend les options suivantes:
keys (boolean, par défaut: true ) : s'il faut renvoyer la clé de chaque entrée. Si défini sur false , les appels vers iterator.next(callback) donnent des clés avec une valeur de undefined 1 . Il y a un petit gain d'efficacité si vous ne vous souciez pas des clés car ils n'ont pas besoin d'être convertis et copiés en JavaScript.values (Boolean, par défaut: true ) : s'il faut renvoyer la valeur de chaque entrée. Si défini sur false , les appels vers iterator.next(callback) produiront des valeurs avec une valeur de undefined 1 .keyAsBuffer (boolean, par défaut: true ) : que ce soit pour renvoyer la clé de chaque entrée en tant que tampon ou chaîne. La conversion d'un tampon en une chaîne entraîne un coût, donc si vous avez besoin d'une chaîne (et que la key peut légitimement devenir une chaîne UTF8), vous devez le récupérer comme un.valueAsBuffer (Boolean, par défaut: true ) : Que ce soit pour renvoyer la valeur de chaque entrée en tant que tampon ou chaîne.fillCache (Boolean, par défaut: false ): si LRU-CACH de LevelDB doit être rempli de données lues. 1 leveldown renvoie une chaîne vide plutôt que undefined pour le moment.
db.clear([options, ]callback)Supprimez toutes les entrées ou une gamme. Pas garanti d'être atomique. Accepte les options de plage suivantes (avec les mêmes règles que sur les itérateurs):
gt (supérieur à), gte (supérieur ou égal) définit la limite inférieure de la plage à supprimer. Seules les entrées où la clé est supérieure à (ou égale à) cette option sera incluse dans la plage. Lorsque reverse=true l'ordre sera inversé, mais les entrées supprimées seront les mêmes.lt (inférieur), lte (inférieur ou égal) définit la limite supérieure de la plage à supprimer. Seules les entrées où la clé est inférieure (ou égale à) cette option sera incluse dans la plage. Lorsque reverse=true l'ordre sera inversé, mais les entrées supprimées seront les mêmes.reverse (boolean, par défaut: false ) : supprimer les entrées dans l'ordre inverse. Efficace en combinaison avec limit , pour supprimer les N dernières entrées.limit (numéro, par défaut: -1 ) : Limitez le nombre d'entrées à supprimer. Ce nombre représente un nombre maximum d'entrées et ne peut pas être atteint si vous arrivez d'abord à la fin de la plage. Une valeur de -1 signifie qu'il n'y a pas de limite. Lorsque reverse=true les entrées avec les clés les plus élevées seront supprimées au lieu des clés les plus basses. Si aucune option n'est fournie, toutes les entrées seront supprimées. La fonction callback sera appelée sans arguments si l'opération a réussi ou avec une Error si elle a échoué pour quelque raison que ce soit.
chainedBatchchainedBatch.put(key, value) Fitre une opération put sur ce lot. Cela peut lancer si key ou value n'est pas valide, en suivant les mêmes règles que la forme du tableau de db.batch() .
chainedBatch.del(key) Fitre une opération del sur ce lot. Cela peut lancer si key n'est pas valide.
chainedBatch.clear()Effacer toutes les opérations en file d'attente sur ce lot.
chainedBatch.write([options, ]callback)Commettre les opérations en file d'attente pour ce lot. Toutes les opérations seront écrites atomiquement, c'est-à-dire qu'elles réussiront ou échoueront sans aucun engagement partiel.
L'argument options facultatifs peut contenir:
sync (booléen, par défaut: false ). Voir db.put() pour plus de détails sur cette option. La fonction callback sera appelée sans arguments si le lot est réussi ou avec une Error si le lot a échoué pour une raison quelconque. Une fois que write a été appelée, aucune autre opération n'est autorisée.
chainedBatch.db Une référence à la db qui a créé ce lot enchaîné.
iterator Un itérateur vous permet d' itérer l'ensemble du magasin ou une gamme. Il fonctionne sur un instantané du magasin, créé au moment où db.iterator() a été appelé. Cela signifie que les lectures sur l'itérateur ne sont pas affectées par les écritures simultanées.
Les itérateurs peuvent être consommés for await...of ou en appelant manuellement iterator.next() successivement. Dans ce dernier mode, iterator.end() doit toujours être appelé. En revanche, la finition, le lancement ou la rupture d'un for await...of boucle appelle automatiquement iterator.end() .
Un itérateur atteint sa fin naturelle dans les situations suivantes:
iterator.seek() était hors de portée. Un itérateur garde une trace du moment où un next() est en cours et lorsqu'une end() a été appelée, il ne permet pas d'appels simultanément simultanés next() , il permet end() tandis qu'un next() est en cours et qu'il n'autorise ni next() ou end() après end() .
for await...of iterator Donne des tableaux contenant une key et value . Le type de key et value dépend des options transmises à db.iterator() .
try {
for await ( const [ key , value ] of db . iterator ( ) ) {
console . log ( key )
}
} catch ( err ) {
console . error ( err )
} iterator.next([callback]) Avancez l'itérateur et rendez l'entrée à cette clé. Si une erreur se produit, la fonction callback sera appelée avec une Error . Sinon, le callback reçoit null , une key et une value . Le type de key et value dépend des options transmises à db.iterator() . Si l'itérateur a atteint son extrémité naturelle, key et value ne seront undefined .
Si aucun rappel n'est fourni, une promesse est renvoyée pour un tableau (contenant une key et value ) ou undefined si l'itérateur a atteint son extrémité naturelle.
Remarque: appelez toujours iterator.end() , même si vous avez reçu une erreur et même si l'itérateur a atteint sa fin naturelle.
iterator.seek(key) Cherchez l'itérateur à une clé donnée ou à la clé la plus proche. Les appels ultérieurs à iterator.next() produiront des entrées avec des clés égales ou supérieures à target , ou égales ou plus petites que target si l'option reverse transmise à db.iterator() était vraie. Il en va de même pour impliciter iterator.next() appelle dans un for await...of boucle.
Si des options de plage comme gt ont été transmises à db.iterator() et que target ne se situe pas dans cette plage, l'itérateur atteindra son extrémité naturelle.
iterator.end([callback]) End Itération et libérer les ressources sous-jacentes. La fonction callback sera appelée sans arguments sur le succès ou avec une Error si la fin a échoué pour quelque raison que ce soit.
Si aucun rappel n'est fourni, une promesse est retournée.
iterator.db Une référence à la db qui a créé cet itérateur.
leveldown.destroy(location, callback) Supprimez complètement un répertoire de base de données LevelDB existant. Vous pouvez utiliser cette fonction à la place d'un répertoire complet rm si vous souhaitez être sûr de supprimer uniquement les fichiers liés au niveau. Si le répertoire ne contient que des fichiers niveaudb, le répertoire lui-même sera également supprimé. S'il y a des fichiers supplémentaires non-LeveldB dans le répertoire, ces fichiers et le répertoire seront laissés seuls.
Le rappel sera appelé lorsque l'opération de détruire sera terminée, avec un éventuel argument error .
leveldown.repair(location, callback)Essayez une restauration d'un magasin de niveau endommagé. À partir de la documentation de niveau:
Si une base de données ne peut pas être ouverte, vous pouvez essayer d'appeler cette méthode pour ressusciter autant que possible le contenu de la base de données. Certaines données peuvent être perdues, alors soyez prudent lorsque vous appelez cette fonction sur une base de données qui contient des informations importantes.
Vous trouverez des informations sur l'opération de réparation dans le fichier journal dans le répertoire du magasin.
Une repair() peut également être utilisée pour effectuer un compactage de la connexion de niveau DBA dans les fichiers de table.
Le rappel sera appelé lorsque l'opération de réparation sera terminée, avec un éventuel argument error .
Actuellement leveldown ne suit pas l'état de l'instance de niveau sous-jacente. Cela signifie que l'appel open() sur une base de données déjà ouverte peut entraîner une erreur. De même, appeler toute autre opération sur une base de données non ouverte peut entraîner une erreur.
levelup suit et gère actuellement l'état et empêchera les opérations hors de l'État d'être envoyées à leveldown . Si vous utilisez leveldown directement, vous devez suivre et gérer l'état pour vous-même.
leveldown expose une fonctionnalité de niveaudb appelé instantanés. Cela signifie que lorsque vous faites par exemple createReadStream et createWriteStream en même temps, toutes les données modifiées par le flux d'écriture n'affecteront pas les données émises par le flux de lecture. En d'autres termes, un instantané NIVEALDB capture le dernier état au moment où l'instantané a été créé, permettant à l'instantané d'itérer ou de lire les données sans voir d'écrits ultérieurs. Toute lecture non effectuée sur un instantané utilisera implicitement le dernier état.
Vous êtes invités à ouvrir un problème sur le référentiel GitHub si vous avez une question.
Les canaux de support passés et non actifs incluent le canal IRC ##leveldb sur Freenode et le groupe Node.js LevelDB Google.
Level/leveldown est un projet open source ouvert . Cela signifie que:
Les individus apportant des contributions importantes et précieuses sont consacrés à l'accès au projet pour contribuer comme bon leur semble. Ce projet ressemble plus à un wiki ouvert qu'un projet open source standard.
Voir le guide de contribution pour plus de détails.
Ce projet utilise des sous-modules GIT. Cela signifie que vous devez le cloner récursivement si vous prévoyez d'y travailler:
$ git clone --recurse-submodules https://github.com/Level/leveldown.gitAlternativement, vous pouvez initialiser les sous-modules à l'intérieur du dossier cloné:
$ git submodule update --init --recursivenpm version ..git push --follow-tags./prebuilds : npm run download-prebuildsnpm run test-prebuildcanadian-pubnpm publish Soutenez-nous avec un don mensuel sur Open Collective et nous aidez à poursuivre notre travail.
Mit
leveldown s'appuie sur l'excellent travail des équipes LevedDB et Snappy de Google et des contributeurs supplémentaires. LevelDB et Snappy sont tous deux délivrés en vertu de la nouvelle licence BSD. Une grande partie du support Windows leveldown provient du port Windows LevelDB (archivé) par Krzysztof Kowalczyk ( @kjk ). Si vous utilisez leveldown sur Windows, vous devriez lui remercier!