new webpack.DefinePlugin({
PRODUCTION: JSON.stringify(true),
VERSION: JSON.stringify("5fa3b9"),
BROWSER_SUPPORTS_HTML5: true,
TWO: "1+1",
"typeof window": JSON.stringify("object")
})
https://github.com/webpack/docs/wiki/list-of-plugins#defineplugin
这似乎非常不寻常,不必要且“容易出错”。
是否存在类型检查问题?
答案 0 :(得分:33)
答案在示例下面:
- 如果值是字符串,则将其用作代码片段。
- 如果值不是字符串,则会进行字符串化(包括函数)。
即。将字符串的值插入源代码 verbatim 。
直接传递JSON.stringify(true)
或传递true
是相同的,因为非字符串值会转换为字符串。
但是,JSON.stringify('5fa3b9')
和"5fa3b9"
之间存在很大差异:
假设您的代码是
if (version === VERSION)
然后VERSION: JSON.stringify('5fa3b9')
将导致
if (version === "5fa3b9")
但VERSION: "5fa3b9"
会导致
if (version === 5fa3b9)
这是无效代码。
请注意,因为插件执行直接文本替换,所以赋予它的值必须包含字符串本身内部的实际引号。通常情况下,这可以通过替代引号完成,例如'"""""""""""""'''生产'