2015-10-07 10 views
5

Ich habe lodash in meinen Anwendungen und Bibliotheken verwendet und ich habe meine Anwendungen und Bibliotheken mit webpack (und UglifyJS) verpackt.Lodash Dead Code Entfernung in ES6

Das Problem dabei ist, dass, wenn minifying, wenn Sie lodash in seiner Gesamtheit eingeführt, UglifyJS kennt nicht die Funktionen von lodash zu entfernen, die nicht verwendet werden. Clever Menschen haben mit dem Import nur die Funktionen kommen Sie von lodash verwenden werden, etwa so:

var forEach = require('lodash/array/forEach'); 

Dies funktioniert gut und die Ergebnisse in einer viel kleineren kompilierte Version meines Codes. Es kann jedoch in Dateien, die viele Teile von lodash verwenden, sehr mühsam sein.

Kann der gleiche Effekt mit ES6-Importen erreicht werden und BabelDCE transformer? Zum Beispiel:

import { forEach } from 'lodash'; 

ich verdächtig bin, da es von der der Wurzel der lodash Bibliothek und nicht von der einzelnen Funktion der Datei wie das früheren Beispiel ist zu importieren.

+2

Ich weiß nicht, die Antwort auf Ihre eigentliche Frage, und ich weiß darüber nicht zu viel, aber ich denke, dass das Ziel der https://github.com/rollup/rollup ist. – JMM

Antwort

10

Angenommen, Sie verwenden Babel wahrscheinlich schon, denke ich babel-plugin-lodash den Trick tun können. Es ist in der Lage Transformation durchzuführen von

import lodash from 'lodash'; 

lodash.map([1, 2, 3], function(x) { 
    // ... 
}); 

zu

import _map from 'lodash/collection/map'; 

_map([1, 2, 3], function(x) { 
    // ... 
}); 

WICHTIG! Wie von @reflog bei Kommentaren erwähnt, funktioniert dieser Ansatz nicht mit lodash-Verkettung!

+0

Das ist großartig. Ich hatte keine Ahnung, dass es existiert. Vielen Dank! – DynamiteReed

+2

Beachten Sie, dass es nicht mit Verkettung funktioniert. Also, wenn Sie versuchen, '' _ _ (array) .map (func) .tap (log) '' 'es wird nicht funktionieren. – reflog

+0

@ reflog Danke. Eine Notiz hinzugefügt. –