2014-12-10 20 views
24

Niedawno zmieniłem z trybu przeglądania na pakiet internetowy, a czas budowy skoczył z 4s do 16s na (2014 MBP). Rozumiem, że webpack robi o wiele więcej niż przeglądanie, ale nie powinienem brać tak długo. Mój proces tworzenia jest dość prosty. Czy są jakieś wskazówki lub opcje, które poprawią mój czas budowy?Jak poprawić wydajność Webpack?

var webpackOptions = { 
    cache : true, 
    output: { 
    filename: '[name].js', 
    }, 
    module: { 
    loaders: [ 
     { test: /\.js$/, loader: 'jsx-loader' }, 
     { test: /\.css$/, loader: "style!css" } 
    ] 
    }, 
}; 


gulp.task('buildJs', function(){ 
    multipipe(
     gulp.src(jsSrcPath), 
     named(), 
     webpack(webpackOptions), 
     uglify(), 
     gulp.dest(jsDestPath) 
    ).on('error', function(error){ 
     console.log(error) 
    }); 
}); 
+3

Czy jest różnica między korzystaniem z WebPacka za pośrednictwem Gulp a Webpacka? Po prostu ciekawy :) –

Odpowiedz

9

Możesz użyć opcji noParse dla dużych plików, takich jak jquery i kanciasty.

Przykłady tutaj: https://github.com/jeffling/angular-webpack-example/blob/b2b59dff60c35ee6d70170948ab15bba8af5e613/template/webpack.config.coffee#L60

Ponadto, jeśli ustawiony cache true, podczas oglądania go przebudowuje wiele szybciej.

Inną techniką zwiększania prędkości jest umieszczanie dużych zależności, których nie zamierzasz edytować w osobnym pakiecie.

+0

Podoba mi się pomysł umieszczenia dużych zależności w osobnym pakiecie (na przykład jquery lub kanciasty). Jak jednak wymagać ("jquery") i używać go w głównym pakiecie aplikacji? – Aman

+1

Upewnij się tylko, że oba pakiety są zawarte w twoim html i powinno działać –

+0

Domyślnie buforowanie jest ustawione na true do oglądania. – Swordfish0321

24

Powinieneś ustawić ścieżki include dla swoich ładowarek. Przykład:

{ test: /\.js$/, loader: 'jsx-loader', include: jsSrcPath } 

Rozważ wykonanie tego samego dla tego przypadku css.

Z mojego doświadczenia wynika, że ​​może to przynieść ogromne zyski, ponieważ nie musi już przechodzić przez node_modules. Ewentualnie możesz excludenode_modules, ale uważam, że jest lepiej dla skonfigurowania tego include. Jest jednak bardziej skomplikowane, jeśli wymagasz zawartości ze ścieżki dołączania.

Docs for include/exclude

+0

browserify nie stosuje transformacji do 'node_modules', to jest powód, dla którego jest szybszy (po wyjęciu z pudełka) – timaschew

+0

@timaschew Tak, to wyjaśnia to skutecznie. Dzięki webpackowi 'include' jest bardzo dobrym pomysłem. –

+0

Dziękuję, że zrobiłeś dla mnie ogromną różnicę. –

1

Ostatnio nowa ładowarka moduł HappyPack (nie napisane przez mnie), sprawia, że ​​ciężkie użycia parallelization i buforowanie na dysku dość znacznie skrócić czas opierać się na dużych bazach kodu. Czas kompilacji w mojej bazie kodu zmienił się z 40 sekund na 10. To wciąż całkiem nowa biblioteka, więc nie jest zbyt dobrze udokumentowana lub przyjazna dla użytkownika. Warto się jednak przyjrzeć.

+0

W moim przypadku happyloader nie pomógł, ale devtool: "eval-source-map", pomógł troszeczkę. –