2016-02-02 16 views
5

Deshalb möchte ich tun:Webpack config: Bedingter Import-Modul

if (process.env.NODE_ENV === 'production') { 
    import StatsPlugin from 'webpack-stats-plugin'; 
} 

Aber eslint sagt:

Parsing error: 'import' and 'export' may only appear at the top level 

I babel-eslint Parser bin mit.

Impliziert das ich nicht Module bedingt laden kann?

+1

Wenn Sie Module bedingt laden möchten, sollten Sie nur diese Regel deaktivieren. –

+1

Laut ES6 Spezifikation ist dies nicht möglich. Sie könnten stattdessen eine regelmäßige Anforderung versuchen. –

+0

Verwandte, obwohl nicht ein Duplikat: https://stackoverflow.com/questions/36367532/how-can-i-conditional-import-an-es6-module – ericsoco

Antwort

6

Dynamische Synchron Importe sind nicht möglich mit ES2015-Modulen. Es ist nur möglich, den Inhalt dynamisch mit asynchronem Import über import() zu importieren.

Warum importieren Sie es nicht einfach und wenden es bedingt an?

import StatsPlugin from 'webpack-stats-plugin'; 

... 

if (process.env.NODE_ENV === 'production') { 
    config.plugins.push(new Statsplugin()) 
} 
+0

Wenn ich ein Modul importieren und nicht darauf verweisen Irgendwo in meinem Code später (dh im Wesentlichen enthalten, aber nicht verwenden), enthält Webpack immer noch in das Bündel? –

+7

webpack 1 enthält es immer noch, weil CommonJS diese Art der Optimierung nicht erlaubt, kann webpack 2 nicht verwendete Funktionen entfernen, wenn ES2015-Module verwendet werden. Diese Funktion wird Baumschütteln genannt. –

+1

@jhnns Können Sie diesen Kommentar in Ihre Antwort aufnehmen? Ich bin von einer ähnlichen Situation hierher getrieben worden, aber es scheint, dass mit Webpack 2 die Optimierung bereits gemacht wird. –