2016-07-01 17 views
7

Ho un progetto come questo:Webpack 2: non è possibile risolvere il modulo

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

Ecco il file di configurazione webpack:

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, ho:

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

Questo funziona come previsto con webpack 1.x, ma il modulo myModule non è risolto con webpack 2, sto ricevendo "Modulo non trovato: impossibile risolvere 'modulo' in ... \ App".

Sembra che la voce modulesDirectories sia ignorata e l'URL di base corrisponda alla cartella della voce.

Cosa posso fare per risolvere correttamente i moduli con webpack 2?

+0

Christopher Davies ha la risposta corretta, è necessario selezionarlo. –

risposta

3

Edit: Come altri hanno notato, per Webpack 2, qualcosa di simile a questo funziona:

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

Per Webpack 1, ho una messa a punto che ha questa voce:

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

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

In realtà per "globale" intendevo che si tratta di un modulo globale, non di un oggetto globale. Ho modificato la mia domanda. – user3475757

+0

Se si legge il documento, come indicato da laggingreflex sopra, "root" non fa più parte della sintassi di risoluzione della configurazione di Webpack 2. Solo "moduli". – Will

+0

Questa risposta è corretta per Webpack v1.x ma passando a Webpack v2.x l'oggetto 'resolve.modules' sostituisce' modulesDirectories' e 'root' –

-4

Grazie a Christopher Davies ho risolto il problema aggiungendo:

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

Ho dovuto aggiungere resolvoLoader altrimenti avrei ricevuto un errore su babel-loader che non è stato possibile caricare.

12

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

In Webpack 2, resolver da root, modulesDirectories, e fallback impostazioni si fonderanno in un'unica proprietà - modules. Ecco come possiamo risolvere le posizioni dei file e dei moduli in Webpack 2:

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

È possibile specificare un numero di directory in modules, ma assicuratevi di non dimenticare node_modules o dipendenze dei pacchetti NPM non riuscirà a caricare.


Quindi nel tuo caso ciò che era prima:

resolve: { 
    modulesDirectories: ['core'] 
} 

ora ha bisogno di essere

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