2016-03-13 1 views
5

De https://lodash.com/:Charger une seule méthodes de lodash pour les petits construit avec browserify/Rollup/webpack

// Load a single method for smaller builds with browserify/rollup/webpack. 
var chunk = require('lodash/chunk'); 
var extend = require('lodash/fp/extend'); 

Cela fonctionne bien avec la plupart des méthodes: each, map, isArray, etc. La seule méthode que je reçois connot le travail est lodash/chain.

Le code actuel où j'importer toute la bibliothèque lodash va quelque chose comme ceci:

_.chain(items) 
    .filter(...) 
    .groupBy(...) 
    .map(...) 
    .concat(...) 
    .value(); 

Quelle serait la bonne façon de créer un objet chainable approprié qui ne contient pas toutes les méthodes incluses dans la construction lodash? La méthode chain crée un objet wrapper lodash et le renvoie. Je pourrais créer ma propre méthode de la chaîne comme celui-ci

var lodash = require('lodash/wrapperLodash'); 
var filter = require('lodash/filter'); 
var map = require('lodash/map'); 

function chain(value) { 
    var result = lodash(value); 
    result.__chain__ = true; 
    result.filter = filter 
    result.map = map; 
    return result; 
} 

module.exports = chain; 

Maintenant, l'appel à chain sera en mesure d'exécuter filter et map. Malheureusement, le résultat de chain().filter n'aura pas les méthodes que j'ai attachées dans la chaîne d'origine. Quelle est la manière appropriée de créer un objet lodash chainable personnalisé?

+0

Trouvé. Commencé avec ceci: https://www.npmjs.com/package/babel-plugin-lodash. Puis, après avoir utilisé le plugin, j'ai obtenu: La construction du module a échoué: Erreur: filename.js: la syntaxe de lodash chaining n'est pas supportée par babel-plugin-lodash. Envisagez de remplacer la syntaxe de chaînage par _.flow et _.modèles de composition flowRight. Voir https://medium.com/making-internets/why-using-chain-is-a-mistake-9bc1f80d51ba. Le dernier lien a une très bonne explication. – jmlopez

Répondre

1

Il existe différentes solutions à cela, bien que toutes ne conservent pas les capacités de la chaîne.

Lodash build personnalisé (garde chaîne)

Utilisez https://lodash.com/custom-builds avec vos méthodes personnalisées. Il va générer une construction lodash avec les méthodes dont vous avez besoin. Le problème que j'ai rencontré dans le passé avec cette solution est que la taille de la construction est assez élevée même si elle importe quelques méthodes, car elle a besoin de toute la fonction lodash qui entoure vos données pour pouvoir utiliser la chaîne. .

Importer uniquement les fonctions dont vous avez besoin (pas de chaîne)

La plupart des fonctions de lodash sont disponibles sous forme de paquets autonomes NPM (example pick), de sorte que vous pouvez les importer individuellement. Cependant, vous n'aurez pas de chaîne avec cette solution.

fonctions d'importation de lodash src (Aucune chaîne)

Une autre solution consiste à importer des fonctions spécifiques de votre module complet de lodash, de sorte que toute Bundler ne prendra que cette fonction avec ses dépendances au lieu de l'ensemble lodash, comme :

var pick = require('lodash/pick'); 

Conseil: ne pas utiliser la chaîne

Bien que vous avez demandé d'avoir spécifiquement la cha Je voudrais vous décourager de l'utiliser, car c'est une mauvaise pratique de programmation fonctionnelle. Vérifiez this blog article (comme vous l'avez mentionné dans votre premier commentaire) pour une explication très approfondie sur pourquoi mieux vaut ne pas utiliser la chaîne, et comment s'éloigner de celui-ci.