2016-06-21 11 views
1

In Webpack 2.0 (@ 2.1.0-Beta6), wenn ich gehe, um eine Datei zu importieren, die auf eine Datei zeigt, die nicht existiert, bekomme ich einen Build-Zeit Fehler.Webpack 2.0 prüft Existenz von Baum geschüttelt ES6 Modul importiert

Wenn ich gehe, um einen Export zu importieren, der nicht existiert aus einer Datei, die existiert, bekomme ich einen Laufzeitfehler.

Gibt es eine Möglichkeit, den Export von Webpack-Prüfungen auf die gleiche Weise wie Dateien zu verarbeiten?

//webpack.config.js 
module.exports = { 
    module: { 
    loaders: [ 
     { 
     test: /\.js$/, 
     exclude: /node_modules/, 
     loader: 'babel-loader', 
     query: { 
      presets: ['es2015-native-modules'] 
     } 
    ], 
    } 
} 
+0

Es lohnt sich, hier den Inhalt der Datei 'webpack config' einzufügen. – Venky

+0

versuche 'export default module.exports = {/ * code * /};' – Venky

+0

@Venky ist nicht das selbe wie 'module.exports = {/ * code * /}'? Du verlierst auch die Fähigkeit, mit CommonJS zu schütteln. – wegry

Antwort

1

Ich glaube, ein Laufzeitfehler ist in diesem Fall korrektes Verhalten. Sie erhalten wahrscheinlich keinen Laufzeitfehler vom Import selbst, aber nur wenn Sie versuchen, es zu benutzen, ist es undefiniert.

Eine Datei, die vorhanden ist oder nicht, kann durch einen Systemaufruf während der Bauzeit leicht ermittelt werden. Ein Modul, das einen bestimmten Wert exportiert oder nicht, kann jedoch zur Laufzeit geändert werden - nicht, dass das eine gute Idee ist -, also trifft Webpack keine Entscheidung über die Build-Zeit, ob es zu einem Bail Out kommen soll oder nicht.

Betrachten Sie den folgenden Code ein:

// hats.js 
var hats = undefined; 
if (Math.random() > 0.5) { 
    hats = 'i have a hat!'; 
} 
export const HATS = hats; 
// index.js 
import { HATS } from './hats'; 
console.log('hats is:', HATS} 

Webpack kann nicht bei der Erstellung wissen, ob oder nicht HATS zur Laufzeit existieren wird, so wird es nicht Fehler aus, wenn ich versuche und Import Hüte. HATS wird jedoch korrekt entweder nicht definiert sein oder "Ich habe einen Hut!" wenn während der Ausführung protokolliert. Wenn ich die Export-Zeile aus hats.js lösche, wird es einfach immer undefiniert melden, weil Webpack den Unterschied nach der Übertragung nicht erkennen kann - HATS ist einfach undefiniert. Wenn ich hats.js vollständig entferne, weiß Webpack, dass etwas definitiv falsch ist und Fehler auftreten.

+0

Mit mindestens webpack @ 2 ist keine Transpilation an der Modulauflösung beteiligt. – wegry

Verwandte Themen