2015-10-07 16 views
5

Używam lodash w moich aplikacjach i bibliotekach i pakowałem moje aplikacje i biblioteki przy pomocy webpack (i UglifyJS).Usuwanie martwego kodu Lodasha w ES6

Problem polega na tym, że podczas zamazywania, jeśli zaimportowałeś w całości LASHU, UglifyJS nie wie, aby usunąć funkcje, które nie zostały użyte. Mądrzy ludzie mają pochodzić z importu tylko te funkcje, których będziemy używać od lodash, tak:

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

To działa świetnie i wyniki w znacznie mniejszej wersji skompilowanej mojego kodu. Jednak może to być bardzo uciążliwe w plikach, które używają wielu części lodash.

Czy ten sam efekt można osiągnąć za pomocą importów w stylu ES6 i Babel za DCE transformer? Na przykład:

import { forEach } from 'lodash'; 

jestem podejrzliwy ponieważ jest importem z korzenia biblioteki lodash a nie z pliku indywidualnych funkcja jest jak byłego przykład.

+2

Nie znam odpowiedzi na twoje aktualne pytanie i nie wiem zbyt wiele na ten temat, ale myślę, że to jest cel https://github.com/rollup/rollup. – JMM

Odpowiedz

10

Biorąc pod uwagę, że prawdopodobnie używasz Babel, myślę, że babel-plugin-lodash może załatwić sprawę. Jest w stanie przeprowadzić transformację od

import lodash from 'lodash'; 

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

do

import _map from 'lodash/collection/map'; 

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

WAŻNE! Jak wspomniano w @reflog w komentarzach, to podejście nie działa w przypadku łączenia łańcuchowego!

+0

To jest niesamowite. Nie miałem pojęcia, co istniało. Dziękuję Ci! – DynamiteReed

+2

Pamiętaj, że nie działa z łańcuchem. Więc jeśli spróbujesz '' '_ (array) .map (func) .tap (log)' '' to nie zadziała. – reflog

+0

@reflog Dzięki. Dodano notatkę. –