2015-01-26 17 views
9

Sto cercando di iniettare una variabile in ogni modulo nel mio pacchetto webpack in modo da avere informazioni di debug per gli errori JS per file. Ho permessoIniettare le variabili nel pacchetto web

node: { 
    __filename: true 
} 

Current file path in webpack

nel mio webpack.config, ma vorrei iniettare qualcosa come

var filename = 'My filename is: ' + __filename; 

in ogni modulo prima della compilazione. Ho visto il Banner Plugin con l'opzione raw ma sembra che questo sarebbe solo iniettare il banner al di fuori della chiusura del webpack piuttosto che il risultato desiderato di inserire script in ogni modulo.

risposta

1

Scrivi la tua loader:

my_project/my_loaders/filename-loader.js:

module.exports = function(source) { 
    var injection = 'var __filename = "' + this.resourcePath + '";\n'; 
    return injection + source; 
}; 

aggiungerlo alla vostra pipeline e assicurarsi di aggiungere anche la configurazione:

resolveLoader: { 
    modulesDirectories: ["my_loaders", "node_modules"] 
} 

Vedere la documentazione su how to write a loader.

+0

Ho creato questo caricatore https://github.com/optimizely/marketing-website/blob/dfoxpowell/jordan-webpack-try/loaders/inject-filename-loader.js che funziona benissimo ma non funziona per alcuni motivo nella nostra build di prodotto. Ho postato una domanda qui http://stackoverflow.com/questions/29850802/webpack-loader-not-working-on-jenkins-ci-build e mi fa impazzire se hai qualche idea? – dtothefp

15

ho utilizzare le variabili per risolvere un paio di variabili nel mio file webpack.config.js:

plugins: [ 
    new webpack.DefinePlugin({ 
     ENVIRONMENT: JSON.stringify(process.env.NODE_ENV || 'development'), 
     VERSION: JSON.stringify(require('./package.json').version) 
    }) 
] 

Potrebbe non essere abbastanza dinamica, ma se lo è, allora si potrebbe essere in grado di bypassare questa soluzione caricatore.

+1

Per passare dinamicamente alle variabili è ancora possibile utilizzare questo plug-in. Dì solo quando costruisci: webpack --define myurl = "http: // localhost: 3000" – Richard

+1

perché usi JSON.stringify su process.env.NODE_ENV? –

+0

Se, ad esempio, VERSION viene utilizzato come variabile nel codice e JSON.stringify non viene utilizzato (o un altro meccanismo che aggiunge virgolette), si finisce con qualcosa di simile a questo (un errore del compilatore): console.log (VERSION) -> console.log (1.0.0), quando si desidera console.log ("1.0.0") –

Problemi correlati