2016-07-01 6 views
7

Ich habe ein Projekt wie folgt aus:Webpack 2: kann Modul nicht lösen

root/ 
    webpack-config.js 
    app/ 
     app.js 
     js/ 
     dep.js 
    core/ 
     module.js 

Hier ist die webpack Konfigurationsdatei ist:

module.exports = { 
    entry: './app/app.js', 
    output: { 
     path: __dirname, 
     filename: "[name]-bundle.js" 
    }, 
    module: { 
     loaders: [ 
      { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/  }   
     ] 
    }, 
    resolve: { 
     modulesDirectories: ['core'] 
    } 
    ... 

in app.js, ich habe:

import local_dep from './js/dep'; 
import myModule from 'module'; 

Dies funktioniert wie erwartet mit webpack 1.x, aber das Modul myModule wurde nicht mit webpack 2 aufgelöst, ich bekomme "Modul nicht gefunden: Modul kann nicht aufgelöst werden" in ... \ app ".

Es scheint, dass der Eintrag modulesDirectories ignoriert wird und die Basis-URL dem Ordner des Eintrags entspricht.

Was kann ich tun, damit Module mit Webpack 2 korrekt aufgelöst werden?

+0

Christopher Davies hat die richtige Antwort sein muss, sollten Sie es aus. –

Antwort

3

Edit: Wie andere bereits erwähnt haben, für Webpack 2, so etwas wie dies funktioniert:

{ 
    resolve: { 
    extensions: ['.js', '.jsx'], 
    modules: ['node_modules', path.resolve(__dirname, 'core')] 
    }, 
} 

Für Webpack 1 ich ein Setup haben, die diesen Eintrag hat:

config.resolve = { 
    // Allows us to include js and jsx files without specifying the extension 
    extensions: ['', '.jsx', '.js'], 

    root: [path.resolve('./core')] 
}; 
+0

Eigentlich bedeutet "global", dass das ein globales Modul ist, nicht das globale Objekt. Ich habe meine Frage bearbeitet. – user3475757

+0

Wenn Sie das Dokument lesen, wie oben bereits erwähnt, ist "root" nicht mehr Teil der auflösenden Syntax der Webpack 2-Konfiguration. Nur "Module". – Will

+0

Diese Antwort ist für Webpack v1.x korrekt, aber wenn Sie zu Webpack v2.x wechseln, ersetzt das 'resolve.modules' -Objekt' modulesDirectories' und 'root' –

-4

Dank Christopher Davies behob ich das Problem, indem ich hinzufügte:

resolveLoader: { 
    root: path.join(__dirname, 'node_modules') 
}, 
resolve: { 
    root: ['./core'] 
} 

Ich musste die resolveLoader Zeile hinzufügen, sonst bekam ich einen Fehler über babel-loader, der nicht geladen werden konnte.

12

aus: http://moduscreate.com/webpack-2-tree-shaking-configuration/

In Webpack 2, Resolvern von root, modulesDirectories und fallback Einstellungen in eine einzige Eigenschaft verschmelzen - modules. Hier ist, wie wir Datei und Modulpositionen in Webpack 2 lösen können:

resolve: { 
    modules: [ 
     path.resolve('./client'), 
     'node_modules' 
    ] 
    }, 

Sie können eine Reihe von Verzeichnissen in modules angeben, aber stellen Sie sicher, nicht zu vergessen node_modules oder npm Paketabhängigkeiten werden nicht geladen werden.


Also in Ihrem Fall, was vorher war:

resolve: { 
    modulesDirectories: ['core'] 
} 

jetzt

resolve: { 
    modules: ['core'] // also 'node_modules' 
}