2015-01-26 10 views
9

Ich versuche eine Variable in jedes Modul in meinem Webpack-Paket zu injizieren, um Debug-Informationen für JS-Fehler pro Datei zu erhalten. Ich habeVariablen in das Webpack einfügen

node: { 
    __filename: true 
} 

Current file path in webpack

in meinem webpack.config aktiviert ist, aber ich möchte so etwas wie

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

in jedes Modul vor der Kompilierung injizieren. Ich habe die Banner Plugin mit der raw Option gesehen, aber es scheint, dass dies nur das Banner außerhalb des Webpack-Verschlusses injizieren würde, anstatt mein gewünschtes Ergebnis, Skript in jedes Modul zu injizieren.

Antwort

1

Schreiben Sie Ihre eigene loader:

my_project/my_loaders/filename-loader.js:

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

Fügen Sie es Ihrer Pipeline und stellen Sie sicher, auch die Konfiguration hinzuzufügen:

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

Siehe Dokumentation unter how to write a loader.

+0

Ich habe diesen Lader https://github.com/optimizely/marketing-website/blob/dfoxpowell/jordan-webpack-try/loaders/inject-filename-loader.js erstellt, der gut funktioniert, aber für einige nicht funktioniert Grund in unserem Produkt CI-Build. Ich habe hier eine Frage gestellt http://stackoverflow.com/questions/29850802/webpack-loader-not-working-on-jenkins-ci-build und es macht mich verrückt, wenn Sie irgendwelche Ideen haben? – dtothefp

15

ich Variablen verwenden, um ein paar Variablen in meiner webpack.config.js Datei zu beheben:

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

Es ist vielleicht nicht dynamisch genug sein, aber wenn es ist, dann könnten Sie in der Lage sein, diese loader Lösung zu umgehen.

+1

Um Variablen dynamisch zu übergeben, können Sie dieses Plugin weiterhin verwenden. Sagen Sie einfach beim Erstellen: webpack --define myurl = "http: // localhost: 3000" – Richard

+1

Warum verwenden Sie JSON.Stringify auf process.env.NODE_ENV? –

+0

Wenn VERSION beispielsweise als Variable im Code verwendet wird und JSON.stringify nicht verwendet wird (oder ein anderer Mechanismus, der Anführungszeichen hinzufügt), dann haben Sie am Ende etwas ähnliches (einen Compilerfehler): console.log (VERSION) -> console.log (1.0.0), wenn Sie console.log ("1.0.0") wollten –