2017-04-18 7 views
0

Webpack unterstützt die Substitution von konstanten Ausdrücken bei der Erstellung über webpack.DefinePluginwebpack.DefinePlugin - nicht in der Lage zu bekommen jede Substitution

zur Vorverarbeitung des Code, um Umgebungen zu zielen auf unterschiedliche Build

Dies ist äußerst nützlich zu arbeiten.

Jedoch, trotz unzähliger Experimente und Forschung, kann ich keine Substitution wirksam werden.

Ich weiß, dass der Plugin-Abschnitt von Webpack erkannt wird, da die Ausgabe hässlich ist.

Mein tatsächlicher Anwendungsfall ist viel komplexer, aber das Problem, das ich erfahre, wird anhand des folgenden minimalen Codes und der minimalen Konfiguration demonstriert.

webpack 2.2.1

test.js

document.write ("xx") 

Ich wünsche „xx“, "etwas anderes"

webpack.config.js zu verwandeln

var webpack = require('webpack'); 

module.exports = { 

    plugins: [ 
    new webpack.DefinePlugin(
     { 
      "xx" : JSON.stringify("SOMETHING DIFFERENT") 
      } 
     ) 
     , new webpack.optimize.UglifyJsPlugin() 
    ] 

} 

Befehlszeile

Webpack test.js out.js 

Ausgangs Fragment ...

… t(t.s=1)}([function(n,t){document.write("xx")},function(n,t,r){r(0),n.exports=r(0)}]); 

Die xx ist nicht mit etwas anderem

ersetzt

Antwort

1

Die DefinePlugin wird nur Kennungen ersetzen. Sie versuchen, Teile einer Zeichenfolge zu ersetzen, aber Zeichenfolgen werden überhaupt nicht berührt.

Wenn Sie:

document.write(xx) 

Sie die erwartete bekommen:

document.write("SOMETHING DIFFERENT"); 

Sie durch die Anführungszeichen nicht um "xx" verwirren lassen, die in der Tat in diesem Fall nicht erforderlich, Sie werden jedoch verwendet, um Schlüssel zu definieren, die Symbole enthalten, die in einem Bezeichner nicht gültig sind. Wenn der Schlüssel ein gültiger Bezeichner ist, funktioniert er (er wird automatisch in einen String konvertiert), andernfalls müssen Sie ihn in Anführungszeichen setzen, da jeder String als Schlüssel verwendet werden kann. Zum Beispiel:

const obj = { 
    xx: "works fine, quotes can be omitted around xx", 
    x-2: "does not work and requires quotes, SyntaxError: Unexpected token -", 
    "x-2": 'works again, with the key being 'x-2'" 
} 
Verwandte Themen