webpack.DefinePlugin - 无法使任何替换工作

时间:2017-04-18 21:53:12

标签: webpack

Webpack支持在构建时通过webpack.DefinePlugin

替换常量表达式

这对于预处理代码以便针对不同的构建环境非常有用。

然而,尽管有无数的实验和研究,但我无法任何替换生效。

我知道插件部分是由webpack识别的,因为输出是uglified。

我的实际用例要复杂得多,但我遇到的问题通过以下最小代码和配置进行演示。

webpack 2.2.1

test.js

document.write  ("xx")

我希望将“xx”转换为“SOMETHING DIFFERENT”

webpack.config.js

var webpack = require('webpack');

module.exports = {

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

}

命令行

Webpack test.js out.js

输出片段......

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

xx不会替换为SOMETHING DIFFERENT

1 个答案:

答案 0 :(得分:1)

list<Vertex*>::iterator只会替换标识符。您正在尝试替换字符串的某些部分,但字符串根本没有被触及。

如果您使用:

DefinePlugin

你会得到预期的结果:

document.write(xx)

不要被document.write("SOMETHING DIFFERENT"); 周围的引号弄糊涂,这在这种情况下实际上不需要,但用于定义包含在标识符中无效的符号的键。当密钥是有效的标识符时它会起作用(它会自动转换为字符串),否则你需要将它放在引号中,因为任何字符串都可以用作键。例如:

"xx"