2015-10-07 16 views
52

Sto usando webpack per un framework di nodi che sto costruendo (anche se probabilmente dovrei usare gulp, devo ammetterlo). Quando includo il modulo EJS, il webpack lo include nel sorgente compilato, anche se esplicitamente dico di escludere la dir node_modules.Webpack non escluso node_modules

module.exports = { 
    context: __dirname, 
    target: 'node', 
    // ... 
    output: { 
     libraryTarget: 'commonjs' 
     // ... 
    }, 
    module: { 
     loaders: [ 
      { 
       test: /\.js$/, 
       exclude: /node_modules/, 
       loader: 'babel-loader?{ "stage": 0, "optional": ["runtime"] }' 
      } 
     ] 
    } 
}; 

Come potete vedere, ho un test per i file JS, e lo dico da escludere node_modules; perché sta ignorando la mia esclusione?

risposta

109

dal file di configurazione, sembra che si sta escludendo solo node_modules di essere analizzato con babel-loader, ma non di essere in bundle.

Al fine di escludere node_modules e nativi librerie nodo da bundling, è necessario:

  1. Aggiungi target: 'node' al webpack.config.js. Questo sarà exclude native node modules (percorso, fs, ecc.) Da essere in bundle.
  2. Utilizzare webpack-node-externals per escludere altri node_modules.

Così il vostro file di configurazione risultato dovrebbe essere simile:

var nodeExternals = require('webpack-node-externals'); 
... 
module.exports = { 
    ... 
    target: 'node', // in order to ignore built-in modules like path, fs, etc. 
    externals: [nodeExternals()], // in order to ignore all modules in node_modules folder 
    ... 
}; 
+1

C'è qualcosa di simile nel browser? (cioè target: 'browser') –

+0

Sto cercando di capire cosa 'esclude:/node_modules /' fa. Potresti elaborare? Cosa potrebbe accadere se lo lasciassimo fuori? –

+0

È un'espressione regolare.se lo si lascia fuori, node_modules sarà incluso – meredrica

7

uso Prova percorso assoluto:

exclude:path.resolve(__dirname, "node_modules") 
+3

Anche questo non ha funzionato. – ndugger

+0

puoi mostrarci come è strutturato il progetto? La struttura del file – Alan

+1

non funziona per webpack 3.5.5 – vijay

-1

Questo stava accadendo a me perché avevo specificato mia resolve.extensions ma non è riuscito a includere l'estensione vuota '':

resolve: { 
    extensions: ['.js', '.jsx'] 
}, 

Dal webpack docs:

L'impostazione di questa opzione sostituirà il valore predefinito, ovvero w ebpack non tenterà più di risolvere i moduli usando le estensioni predefinite. Se si desidera che i moduli richiesti con la loro estensione (ad esempio require ('./ somefile.ext')) siano correttamente risolti, è necessario includere una stringa vuota nell'array. Allo stesso modo, se desideri che i moduli richiesti senza estensioni (ad esempio require ('underscore')) siano risolti in file con estensioni ".js", devi includere ".js" nell'array.

aggiungere l'estensione vuota risolto gli errori:

resolve: { 
    extensions: ['', '.js', '.jsx'] 
}, 
+5

Non funziona in webpack 2.2: 'Oggetto di configurazione non valido. Webpack è stato inizializzato utilizzando un oggetto di configurazione che non corrisponde allo schema dell'API. - configuration.resolve.extensions [0] non dovrebbe essere vuoto. – alwe

5

Se è stato eseguito in questo problema quando si utilizza tipografico, potrebbe essere necessario aggiungere skipLibCheck: true nel file tsconfig.json.

Problemi correlati