2016-03-13 2 views
5

Von https://lodash.com/:laden ein einzelnes lodash Methoden für kleinere baut mit 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'); 

Das funktioniert gut mit den meisten Methoden: each, map, isArray usw. Die eine Methode, die ich connot bekommen Arbeiten ist lodash/chain.

Der aktuelle Code, wo ich die ganze lodash Bibliothek importieren geht dies so etwas wie:

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

Was ist der richtige Weg ein richtiges verkettbar Objekt zu schaffen, die nicht alle Methoden enthält enthalten bauen im lodash würde? Die Methode chain erstellt ein lodash-Wrapper-Objekt und gibt es zurück. Ich konnte meine eigene Kette Methode wie diese

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; 

nun der Aufruf an chain in der Lage, auszuführen filter und map erstellen. Leider hat das Ergebnis von chain().filter nicht die Methoden, die ich in der ursprünglichen Kette angehängt habe. Was ist der richtige Weg, um ein benutzerdefiniertes Objekt zu erstellen?

+0

Es gefunden. Begonnen damit: https://www.npmjs.com/package/babel-plugin-lodash. Dann, nachdem ich das Plugin benutzt hatte, bekam ich: Modul Build fehlgeschlagen: Fehler: filename.js: lodash Verkettungssyntax wird nicht von babel-plugin-lodash unterstützt. Sie können die Verkettungssyntax durch _.flow und _ ersetzen.flowRight-Kompositionsmuster Siehe https://medium.com/making-internets/why-using-chain-is-a-mistake-9bc1f80d51ba. Der letzte Link hat eine sehr gute Erklärung. – jmlopez

Antwort

1

Es gibt verschiedene Lösungen dafür, obwohl nicht alle von ihnen die Kettenfähigkeiten behalten.

Lodash Maßarbeit (hält Kette)

Verwenden https://lodash.com/custom-builds mit benutzerdefinierten Methoden. Es wird einen Build mit den von Ihnen benötigten Methoden generieren. Das Problem, das ich in der Vergangenheit mit dieser Lösung gefunden habe, ist, dass die Größe des Builds sehr hoch ist, obwohl einige Methoden importiert werden, da es die gesamte lodash-Funktion benötigt, die die Daten umgibt, um die Kette verwenden zu können .

Import nur die Funktionen, die Sie benötigen (keine Kette)

Die meisten der lodash Funktionen zur Verfügung stehen als eigenständige Pakete in npm (example pick), so dass man sie einzeln importieren. Sie werden jedoch keine Kette mit dieser Lösung haben.

Importfunktionen von lodash src (keine Kette)

Eine andere Lösung spezifische Funktionen aus Ihrem vollständigen lodash Modul zu importieren ist, so wird jede bundler nehmen nur diese Funktion damit Abhängigkeiten anstelle des gesamten lodash ist, wie :

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

Hinweis: Sie Kette nicht

verwenden Obwohl Sie die cha speziell mit gefragt Ich möchte Sie davon abhalten, es zu benutzen, da es eine schlechte funktionale Programmierpraxis ist. Überprüfen Sie this blog article (wie Sie in Ihrem ersten Kommentar erwähnt) für eine sehr gründliche Erklärung warum ist besser, keine Kette zu verwenden, und wie man sich davon weg bewegt.

Verwandte Themen