Utilité du module
Le module util fournit des fonctions d'outils pratiques telles que le jugement du type de données, la copie des attributs d'objet, l'analyse des chaînes de modèles et le traitement des événements.
Ce qui suit est une introduction spécifique et des exemples :
- Déterminer le type de données -
util.is[type]
Ce module fournit des méthodes telles queisDate
,isRegExp
,isError
etc. pour déterminer le type de données des paramètres entrants, par exemple :
1
2
3var util = require('util');
console.log(util.isDate(new Date()));
console.log(util.isRegExp(/some regexp/));
- Copie des propriétés d'objet -
util.inherits()
Cette méthode peut éventuellement hériter d'un constructeur d'un autre, implémentant ainsi l'héritage prototypique.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16var util = require('util');
function Animal() {
this.name = 'Animal';
this.sleep = function() {
console.log(this.name + '正在睡觉!');
}
}
Animal.prototype.eat = function(food) {
console.log(this.name + '正在吃:' + food);
};
function Cat() {
this.name = 'cat';
}
util.inherits(Cat, Animal);
Utilisez Cat
ce constructeur pour hériter Animal
des propriétés d'instance et des propriétés de prototype de et imprimer Cat
les propriétés et méthodes de l'instance.
1
2
3
4var cat = new Cat();
console.log(cat.name);
console.log(cat.eat('fish'));
console.log(cat.sleep());
- util.format() Modèle de sortie formaté
1
2
3
4
5const util = require('util');
const str1 = util.format('%s:%s', 'foo');
const str2 = util.format('%s:%s', 'foo', 'bar', 'baz');
console.log(str1) // => 'foo:%s'
console.log(str2) // => 'foo:bar baz'
Ci-dessus sont util
quelques méthodes courantes de modules, qui peuvent souvent être utilisées pour simplifier le processus de développement réel.
objet
LruCache
Objet de cache LRU (le moins récemment utilisé), voirLruCacheobjet.
1LruCache util.LruCache;
TextDecoder
TextDecoderobjet de décodage, voirTextDecoderobjet.
1TextDecoder util.TextDecoder;
TextEncoder
TextEncoderEncodage d'objets, voirTextEncoderobjet.
1TextEncoder util.TextEncoder;
types
typesLe module fournit des fonctions d'outils pour déterminer les types de données.
1types util.types;
fonction statique
format
Formater les variables selon le format spécifié
1
2static String util.format(String fmt,
...args);
Paramètres d'appel :
- fmt: Chaîne, chaîne de format
- args: ..., liste de paramètres optionnels
Résultats de retour :
- String, renvoie la chaîne formatée
variable de format de format
1static String util.format(...args);
Paramètres d'appel :
- args: ..., liste de paramètres optionnels
Résultats de retour :
- String, renvoie la chaîne formatée
inherits
Héritez des fonctions prototypes d’un constructeur à un autre. Le prototype du constructeur sera défini sur un nouvel objet créé à partir de la superclasse (superConstructor).
1
2static util.inherits(Value constructor,
Value superConstructor);
Paramètres d'appel :
- constructor: Valeur, constructeur initial
- superConstructor : Valeur, la super classe héritée
inspect
La fonction renvoie la représentation sous forme de chaîne d'obj, principalement utilisée pour le débogage. Des options supplémentaires peuvent être utilisées pour modifier certains aspects de la chaîne formatée.
1
2static String util.inspect(Value obj,
Object options = {});
Paramètres d'appel :
- obj: Valeur, précise l'objet à traiter
- options: Objet, spécifiez les options de contrôle de format
Résultats de retour :
- String, renvoie la chaîne formatée
Les paramètres suivants sont pris en charge :
1
2
3
4
5
6
7
8
9{
"colors": false, // specify if output should be colorized, defaults to false
"depth": 2, // specify the max depth of the output, defaults to 2
"table": false, // specify if output should be a table, defaults to false
"encode_string": true, // specify if string should be encoded, defaults to true
"maxArrayLength": 100, // specify max number of array elements to show, set to 0 or negative to show no elements, defaults to 100
"maxStringLength": 10000, // specify max string length to output, set to 0 or negative to show no strings, defaults to 10000
"fields": [], // specify the fields to be displayed, defaults to all
}
deprecate
Encapsule la fonction donnée.Cette fonction est uniquement compatible et n'émet pas d'avertissements.
1
2
3static Function util.deprecate(Function fn,
String msg,
String code = "");
Paramètres d'appel :
- fn: Fonction, étant donné la fonction qui doit être encapsulée
- msg: Chaîne, message d'avertissement reçu
- code: Chaîne, étant donné le numéro d'avertissement
Résultats de retour :
- Function, si le résultat de l'encapsulation
isEmpty
Vérifie si la variable donnée ne contient aucune valeur (aucune propriété énumérable)
1static Boolean util.isEmpty(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, renvoie True si vide
isArray
Vérifie si la variable donnée est un tableau
1static Boolean util.isArray(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, renvoie True s'il s'agit d'un tableau
isBoolean
Teste si la variable donnée est une booléenne
1static Boolean util.isBoolean(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, si c'est booléen, il renvoie True
isNull
Vérifie si la variable donnée est nulle
1static Boolean util.isNull(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, s'il est Null, il renvoie True
isNullOrUndefined
Vérifie si la variable donnée est nulle ou non définie
1static Boolean util.isNullOrUndefined(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, s'il est Null ou Undefined, il renvoie True
isNumber
Teste si la variable donnée est un nombre
1static Boolean util.isNumber(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, renvoie True si c'est un nombre
isBigInt
Teste si la variable donnée est un BigInt
1static Boolean util.isBigInt(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, renvoie True si c'est un nombre
isString
Vérifie si la variable donnée est une chaîne
1static Boolean util.isString(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, renvoie True s'il s'agit d'une chaîne
isUndefined
Vérifie si la variable donnée est non définie
1static Boolean util.isUndefined(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, s'il est non défini, renvoie True
isRegExp
Teste si la variable donnée est un objet régulier
1static Boolean util.isRegExp(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, renvoie True s'il s'agit d'un objet régulier
isObject
Teste si la variable donnée est un objet
1static Boolean util.isObject(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, renvoie True s'il s'agit d'un objet
isDate
Teste si la variable donnée est un objet date
1static Boolean util.isDate(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, renvoie True s'il s'agit d'un objet date
isNativeError
Teste si la variable donnée est un objet d'erreur
1static Boolean util.isNativeError(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, renvoie True s'il s'agit d'un objet d'erreur
isPrimitive
Vérifie si la variable donnée est de type primitif
1static Boolean util.isPrimitive(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, renvoie True s'il s'agit d'un type primitif
isSymbol
Vérifiez si la variable donnée est de type Symbole
1static Boolean util.isSymbol(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, s'il s'agit d'un type Symbol, il renvoie True
isDataView
Vérifie si la variable donnée est de type DataView
1static Boolean util.isDataView(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, s'il s'agit d'un type DataView, il renvoie True
isExternal
Vérifie si la variable donnée est de type Externe
1static Boolean util.isExternal(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, s'il s'agit d'un type Externe, il renvoie True
isMap
Vérifiez si la variable donnée est de type Map
1static Boolean util.isMap(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, s'il s'agit d'un type Map, il renvoie True
isMapIterator
Vérifie si la variable donnée est de type MapIterator
1static Boolean util.isMapIterator(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, renvoie True s'il s'agit d'un type MapIterator
isPromise
Vérifie si la variable donnée est de type Promise
1static Boolean util.isPromise(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, s'il s'agit d'un type Promise, il renvoie True
isAsyncFunction
Vérifie si la variable donnée est de type AsyncFunction
1static Boolean util.isAsyncFunction(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, s'il s'agit d'un type AsyncFunction, il renvoie True
isSet
Vérifie si la variable donnée est de type Set
1static Boolean util.isSet(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, s'il s'agit d'un type Set, il renvoie True
isSetIterator
Vérifie si la variable donnée est de type SetIterator
1static Boolean util.isSetIterator(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, s'il s'agit d'un type SetIterator, il renvoie True
isTypedArray
Vérifie si la variable donnée est de type TypedArray
1static Boolean util.isTypedArray(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, s'il s'agit d'un type TypedArray, il renvoie True
isUint8Array
Vérifie si la variable donnée est de type Uint8Array
1static Boolean util.isUint8Array(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, renvoie True s'il est de type Uint8Array
isFunction
Teste si la variable donnée est un objet fonction
1static Boolean util.isFunction(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, renvoie True s'il s'agit d'un objet fonction
isBuffer
Teste si la variable donnée est une fonctionBufferobjet
1static Boolean util.isBuffer(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de la variable à détecter
Résultats de retour :
- Boolean, si c'est une fonctionBufferL'objet renvoie True
isDeepEqual
La profondeur de la valeur de test est égale à la valeur attendue
1
2static Boolean util.isDeepEqual(Value actual,
Value expected);
Paramètres d'appel :
- actual: Valeur, la valeur à tester
- expected: Valeur, valeur attendue
Résultats de retour :
- Boolean, renvoie True si les profondeurs sont égales
has
Demander si l'objet spécifié contient la clé donnée
1
2static Boolean util.has(Value v,
String key);
Paramètres d'appel :
- v: Valeur, compte tenu de l'objet à interroger
- key: String, spécifiez la clé à interroger
Résultats de retour :
- Boolean, renvoie un tableau de toutes les clés de l'objet
keys
Interroger tous les tableaux de clés de l'objet spécifié
1static Array util.keys(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de l'objet à interroger
Résultats de retour :
- Array, renvoie un tableau de toutes les clés de l'objet
values
Interroger tous les tableaux de valeurs de l'objet spécifié
1static Array util.values(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu de l'objet à interroger
Résultats de retour :
- Array, renvoie un tableau de toutes les valeurs de l'objet
clone
Clonez la variable donnée, s'il s'agit d'un objet ou d'un tableau, copiez le contenu dans le nouvel objet
1static Value util.clone(Value v);
Paramètres d'appel :
- v: Valeur, étant donné la variable à cloner
Résultats de retour :
- Value, renvoie le résultat du clonage
deepFreeze
Geler profondément un objet. L'objet gelé et les objets qu'il contient ne pourront pas être modifiés.
1static util.deepFreeze(Value v);
Paramètres d'appel :
- v: Valeur, spécifie l'objet à geler
extend
Étendre les valeurs clés d'un ou plusieurs objets à l'objet spécifié
1
2static Value util.extend(Value v,
...objs);
Paramètres d'appel :
- v: Valeur, spécifie l'objet à étendre
- objs: ..., spécifie un ou plusieurs objets à développer
Résultats de retour :
- Value, renvoie le résultat développé
_extend
Étendre les valeurs clés d'un ou plusieurs objets à l'objet spécifié, qui est un alias d'extension
1
2static Value util._extend(Value v,
...objs);
Paramètres d'appel :
- v: Valeur, spécifie l'objet à étendre
- objs: ..., spécifie un ou plusieurs objets à développer
Résultats de retour :
- Value, renvoie le résultat développé
pick
Renvoyez unobjectCopier, filtrer uniquement les valeurs d'attribut de la clé spécifiée
1
2static Object util.pick(Value v,
...objs);
Paramètres d'appel :
- v: Valeur, spécifie l'objet à filtrer
- objs: ..., spécifiez une ou plusieurs touches de sélection
Résultats de retour :
- Object, renvoie les résultats filtrés
omit
Renvoyez unobjectCopier, excluant uniquement la valeur d'attribut de la clé spécifiée
1
2static Object util.omit(Value v,
...keys);
Paramètres d'appel :
- v: Valeur, spécifie l'objet à filtrer
- keys: ..., spécifiez une ou plusieurs clés d'exclusion
Résultats de retour :
- Object, renvoie les résultats exclus
first
Récupère le premier élément du tableau
1static Value util.first(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu du tableau à obtenir
Résultats de retour :
- Value, renvoie l'élément récupéré
Obtenez les premiers éléments multiples d'un tableau
1
2static Value util.first(Value v,
Integer n);
Paramètres d'appel :
- v: Valeur, compte tenu du tableau à obtenir
- n: Entier, précise le nombre d'éléments à obtenir
Résultats de retour :
- Value, renvoie le tableau d'éléments obtenu
last
Récupère le dernier élément du tableau
1static Value util.last(Value v);
Paramètres d'appel :
- v: Valeur, compte tenu du tableau à obtenir
Résultats de retour :
- Value, renvoie l'élément récupéré
Obtenez plusieurs éléments à la fin d'un tableau
1
2static Value util.last(Value v,
Integer n);
Paramètres d'appel :
- v: Valeur, compte tenu du tableau à obtenir
- n: Entier, précise le nombre d'éléments à obtenir
Résultats de retour :
- Value, renvoie le tableau d'éléments obtenu
unique
Obtenir une copie dédupliquée des éléments d'un tableau
1
2static Array util.unique(Value v,
Boolean sorted = false);
Paramètres d'appel :
- v: Valeur, étant donné le tableau à dupliquer
- sorted: Booléen,précise si le tableau est trié.Si le tableau est trié,un algorithme rapide sera utilisé.
Résultats de retour :
- Array, renvoie le tableau après avoir supprimé les éléments en double
union
Combinez les valeurs d'un ou plusieurs tableaux dans un tableau avec des valeurs uniques
1static Array util.union(...arrs);
Paramètres d'appel :
- arrs: ..., spécifiez un ou plusieurs tableaux à fusionner
Résultats de retour :
- Array, renvoie le résultat fusionné
intersection
Renvoie l'intersection du tableau contenant arr excluant un ou plusieurs éléments du tableau.
1static Array util.intersection(...arrs);
Paramètres d'appel :
- arrs: ..., spécifiez un ou plusieurs tableaux utilisés pour calculer l'intersection
Résultats de retour :
- Array, renvoie le résultat du calcul de l'intersection
flatten
Convertissez un tableau avec plusieurs niveaux d'imbrication (l'imbrication peut comporter n'importe quel nombre de niveaux) en un tableau avec un seul niveau. Si vous passez le paramètre superficiel, le tableau sera réduit à une seule dimension d'imbrication.
1
2static Array util.flatten(Value arr,
Boolean shallow = false);
Paramètres d'appel :
- arr: Valeur, spécifie le tableau à convertir
- shallow: Booléen, spécifie s'il faut réduire une seule dimension de l'imbrication, la valeur par défaut est false
Résultats de retour :
- Array, renvoie le résultat de la conversion
without
Renvoie un tableau contenant un ou plusieurs éléments du tableau arr, à l'exclusion d'un ou plusieurs éléments.
1
2static Array util.without(Value arr,
...els);
Paramètres d'appel :
- arr: Valeur, spécifie le tableau à exclure
- els: ..., spécifie un ou plusieurs éléments à exclure
Résultats de retour :
- Array, renvoie les résultats exclus
difference
Renvoie un tableau contenant les éléments du tableau arr à l'exclusion des éléments sans tableau.
1
2static Array util.difference(Array list,
...arrs);
Paramètres d'appel :
- list: Array, spécifie le tableau à exclure
- arrs: ..., spécifie un ou plusieurs tableaux à exclure
Résultats de retour :
- Array, renvoie les résultats exclus
each
Parcourez tous les éléments de la liste et affichez chaque élément dans l’ordre. Si le paramètre de contexte est passé, l'itérateur est lié à l'objet de contexte. Chaque fois que l'itérateur est appelé, trois paramètres sont passés : (élément, index, liste)
1
2
3static Value util.each(Value list,
Function iterator,
Value context = undefined);
Paramètres d'appel :
- list: Valeur, spécifie la liste ou l'objet à parcourir
- iterator: Fonction, spécifie la fonction de rappel utilisée pour le parcours
- context: Valeur, spécifie l'objet contextuel lié lors de l'appel de l'itérateur
Résultats de retour :
- Value, renvoie la liste elle-même
map
Chaque valeur de la liste est mappée à un nouveau tableau via une fonction de transformation (itérateur). Si le paramètre de contexte est passé, l'itérateur est lié à l'objet de contexte. Chaque fois que l'itérateur est appelé, trois paramètres sont passés : (élément, index, liste)
1
2
3static Array util.map(Value list,
Function iterator,
Value context = undefined);
Paramètres d'appel :
- list: Valeur, précise la liste ou l'objet à transformer
- iterator: Fonction, spécifie la fonction de rappel utilisée pour la transformation
- context: Valeur, spécifie l'objet contextuel lié lors de l'appel de l'itérateur
Résultats de retour :
- Array, renvoie le résultat de la transformation
reduce
Réduisez les éléments de la liste à une seule valeur. Si le paramètre de contexte est passé, l'itérateur est lié à l'objet de contexte. Chaque fois que l'itérateur est appelé, trois paramètres sont passés : (mémo, élément, index, liste)
1
2
3
4static Value util.reduce(Value list,
Function iterator,
Value memo,
Value context = undefined);
Paramètres d'appel :
- list: Valeur, spécifie la liste ou l'objet à résumer
- iterator: Fonction, spécifie la fonction de rappel utilisée pour la résolution
- memo: Valeur, précise la valeur initiale de la réduction
- context: Valeur, spécifie l'objet contextuel lié lors de l'appel de l'itérateur
Résultats de retour :
- Value, renvoie le résultat résumé
parseArgs
Analyser la chaîne de ligne de commande et renvoyer la liste des paramètres
1static NArray util.parseArgs(String command);
Paramètres d'appel :
- command: String, spécifie la chaîne de ligne de commande à analyser
Résultats de retour :
- NArray, renvoie la liste des paramètres analysés
compile
Compiler le script en code binaire
1
2
3static Buffer util.compile(String srcname,
String script,
Integer mode = 0);
Paramètres d'appel :
- srcname: String, précisez le nom du script à ajouter
- script: String, spécifie le code du script à compiler
- mode: Entier, mode de compilation, 0 : module, 1 : script, 2 : travailleur, la valeur par défaut est 0
Résultats de retour :
- Buffer, renvoie le code binaire compilé
util.compileLes scripts peuvent être compilés dans des blocs de données d'exécution internes v8 (code non exécutable par machine). Le code compilé peut être directement chargé et exécuté par run et require après avoir été enregistré sous *.jsc.
Puisqu'après la compilation, le code cible ne pourra pas obtenir inversement le code source, les programmes qui s'appuient sur Function.toString ne fonctionneront pas correctement.
sync
Enveloppez les fonctions de rappel ou asynchrones pour les appeler de manière synchrone
1
2static Function util.sync(Function func,
Boolean async_func = false);
Paramètres d'appel :
- func: Fonction, étant donné la fonction qui doit être encapsulée
- async_func: Booléen,spécifie que func est traité comme une fonction asynchrone.S'il est faux,il sera automatiquement jugé.
Résultats de retour :
- Function, renvoie une fonction qui s'exécute de manière synchrone
util.syncTraitez la fonction de rappel ou la fonction asynchrone en une fonction de synchronisation pour faciliter l'appel.
L'exemple de rappel est le suivant :
1
2
3
4
5
6
7
8
9
10
11// callback
var util = require('util');
function cb_test(a, b, cb) {
setTimeout(() => {
cb(null, a + b);
}, 100);
}
var fn_sync = util.sync(cb_test);
console.log(fn_sync(100, 200));
Un exemple asynchrone est le suivant :
1
2
3
4
5
6
7
8
9// async/await
var util = require('util');
async function async_test(a, b) {
return a + b;
}
var fn_sync = util.sync(async_test);
console.log(fn_sync(100, 200));
Pour les fonctions qui renvoient des promesses et qui ne sont pas marquées comme asynchrones, le mode de synchronisation peut être spécifié manuellement :
1
2
3
4
5
6
7
8
9
10
11// async/await
var util = require('util');
function async_test(a, b) {
return new Promise(function(resolve, reject) {
resolve(a + b);
});
}
var fn_sync = util.sync(async_test, true);
console.log(fn_sync(100, 200));
promisify
Fonction de rappel Wrap pour les appels asynchrones
1static Function util.promisify(Function func);
Paramètres d'appel :
- func: Fonction, étant donné la fonction qui doit être encapsulée
Résultats de retour :
- Function, renvoie la fonction asynchrone
util.promisifyTraitez la fonction de rappel comme une fonction asynchrone pour faciliter les appels.
L'exemple de rappel est le suivant :
1
2
3
4
5
6
7
8
9
10
11// callback
var util = require('util');
function cb_test(a, b, cb) {
setTimeout(() => {
cb(null, a + b);
}, 100);
}
var fn_sync = util.promisify(cb_test);
console.log(async fn_sync(100, 200));
callbackify
Fonction asynchrone d'enveloppement pour l'appel de rappel
1static Function util.callbackify(Function func);
Paramètres d'appel :
- func: Fonction, étant donné la fonction qui doit être encapsulée
Résultats de retour :
- Function, renvoie la fonction de rappel
util.callbackifyTraitez la fonction asynchrone en une fonction de rappel pour faciliter l'appel.
Un exemple asynchrone est le suivant :
1
2
3
4
5
6
7
8
9
10
11
12// async
var util = require('util');
async function async_test(a, b) {
return a + b;
}
var fn_callback = util.callbackify(async_test);
fn_callback(100, 200, (err, result) => {
console.log(result);
});
buildInfo
Interroger les informations actuelles sur la version du moteur et des composants
1static Object util.buildInfo();
Résultats de retour :
- Object, renvoie l'objet de version du composant
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24{
"fibjs": "0.25.0",
"clang": "9.1",
"date": "Jun 12 2018 07:22:40",
"vender": {
"ev": "4.24",
"expat": "2.2.5",
"gd": "2.2.4",
"jpeg": "8.3",
"leveldb": "1.17",
"mongo": "0.7",
"pcre": "8.21",
"png": "1.5.4",
"mbedtls": "2.6.1",
"snappy": "1.1.2",
"sqlite": "3.23.0",
"tiff": "3.9.5",
"uuid": "1.6.2",
"v8": "6.7.288.20",
"v8-snapshot": true,
"zlib": "1.2.7",
"zmq": "3.1"
}
}