2016-03-13 15 views
5

Da https://lodash.com/:caricare un singolo metodi lodash per i più piccoli costruisce con 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'); 

Questo metodo funziona bene con la maggior parte dei metodi: each, map, isArray, ecc Un metodo che connot ottengo il lavoro è lodash/chain.

Il codice attuale, in cui importare l'intera libreria lodash più o meno così:

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

Quale sarebbe il modo corretto di creare un oggetto chainable adeguato che non contiene tutti i metodi inclusi nel lodash costruire? Il metodo chain crea un oggetto wrapper lodash e lo restituisce. Potrei creare il mio metodo di catena come questo

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; 

Ora la chiamata a chain sarà in grado di eseguire filter e map. Sfortunatamente, il risultato di chain().filter non avrà i metodi che ho allegato nella catena originale. Qual è il modo corretto di creare un oggetto lodash concatenabile personalizzato?

+0

Trovato. Iniziato con questo: https://www.npmjs.com/package/babel-plugin-lodash. Quindi, dopo aver usato il plugin, ho ottenuto: Module build failed: Error: filename.js: la sintassi di lodash chaining non è supportata da babel-plugin-lodash. Considera di sostituire la sintassi di concatenazione con _.flow e _.flowRight modelli di composizione. Vedere https://medium.com/making-internets/why-using-chain-is-a-mistake-9bc1f80d51ba. L'ultimo link ha un'ottima spiegazione. – jmlopez

risposta

1

Ci sono diverse soluzioni a questo, anche se non tutte mantengono le capacità della catena.

Lodash generazione personalizzata (continua a catena)

Usa https://lodash.com/custom-builds con i vostri metodi personalizzati. Genererà una build lodash con i metodi necessari. Il problema che ho riscontrato in passato con questa soluzione è che la quantità di dimensioni della build è piuttosto elevata anche se si importano alcuni metodi, in quanto ha bisogno dell'intera funzione di lodash che avvolge i dati attorno ad essa per poter utilizzare la catena .

Importa solo le funzioni necessarie (Nessuna catena)

maggior parte delle funzioni lodash sono disponibili come pacchetti stand-alone in NPM (example pick), in modo da poterli importare singolarmente. Non avrai catena con questa soluzione, però.

Importa funzioni da lodash src (Nessuna catena)

Un'altra soluzione è quella di importare funzioni specifiche dal modulo lodash completa, in modo che qualsiasi bundler avranno solo funzione con le sue dipendenze, invece di tutta la lodash, come :

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

Consigli: non utilizzare la catena

Anche se lei ha chiesto specificamente avendo il cha in, mi piacerebbe scoraggiarvi dal usarlo, in quanto è una cattiva pratica di programmazione funzionale. Controlla this blog article (come hai detto nel tuo primo commento) per una spiegazione molto approfondita del perché è meglio non usare la catena e come allontanarsi da essa.

Problemi correlati