我最近发现Closure Compiler混淆了HTML data-
属性引用,例如element.dataset.tests
成为r.dataset.a
。显然,这会破坏脚本。
这是最近作为错误提出的,但遭到了拒绝:https://github.com/google/closure-compiler/issues/3099。
我知道我可以使用引用的语法element.dataset['tests']
,但是感觉有点儿奇怪。我想使用externs,因为这似乎是最好的解决方案,但是问题在于,我似乎必须指定可能在数据集对象中使用的每个可能的键。
我目前有这个:
/**
* @type {DOMStringMap}
* @const
*/
HTMLElement.prototype.dataset;
/**
* @type {String}
* @const
*/
HTMLElement.prototype.dataset.tests;
这对于此特定脚本而言效果很好,但仅指定一个与任何数据集对象中的任何键都匹配的通配符会更有用,例如:
/**
* @type {String}
* @const
*/
HTMLElement.prototype.dataset.*;
此语法是否已经存在?还是有其他方法可以做到这一点?本质上,我希望闭包编译器不要对element.dataset
或其任何后代应用任何高级优化。
答案 0 :(得分:0)
我会选择“ wonky”。我相信您会发现编译器将.dataset ['tests']缩小为.dataset.tests。如果出于某种奇怪的原因,它发现将其保留为dataset ['tests']更好地满足了其效率和简洁性的目标,则可能会将.dataset.tests转换为.dataset ['tests']。
如果您确实在extern文件中定义了属性,则对可能性进行拼写将使您有机会记录它们以及它们的用途-并会在代码中捕获拼写错误(如果可行,则为“ *”,不一定。)
或使用jQuery(仍然带有引号,但看起来不妙:-)