gpt4 book ai didi

javascript - 防止 Google Closure Compiler 重命名设置对象

转载 作者:可可西里 更新时间:2023-11-01 01:50:39 25 4
gpt4 key购买 nike

我试图让 Google Closure Compiler 在作为设置或数据传递给函数时不重命名对象。通过查看 jQuery 中存在的注释,我认为这可行:

/** @param {Object.<string,*>} data */
window.hello = function(data) {
alert(data.hello);
};
hello({ hello: "World" });

然而,它最终是这样的:

window.a = function(b) {
alert(b.a)
};
hello({a:"World"});

ajax找到函数 here有这个注释,它似乎工作。那么,为什么不呢?如果数据是来自外部源或设置对象的返回值,我希望能够告诉编译器不要触摸它,使用 this["escape"]在我看来,这样的技巧是侵入性的。

这是一个更好的例子

function ajax(success) {
// do AJAX call
$.ajax({ success: success });
}
ajax(function(data) {
alert(data.Success);
});

输出:

$.b({c:function(a){alert(a.a)}});

success已重命名为 cSuccess (大写 S)已重命名为 a .

我现在用 jQuery 1.6 externs file 编译相同的代码并获得以下输出:

$.ajax({success:function(a){alert(a.a)}});

它还会产生一个警告,指出属性 Success未定义,如我所料,但它无法重命名 Success简单地 a ,那仍然会破坏我的代码。我查看了 ajax 的注释我发现这个类型表达式 {Object.<string,*>=} ,我相应地注释了我的代码,然后重新编译。还是不行……

最佳答案

由于您的注意力似乎集中在源代码而不是输出上,因此您似乎关注的是 DRY(不要重复自己)。这是另一种 DRY 解决方案。

您可以使用 --create_name_map_files 运行 Closure 编译器。这样做会发出一个名为 _props_map.out 的文件。您可以让发送 JSON 的服务器端调用(ASP.Net MVC 或任何可能的调用)在发送 JSON 时使用这些映射,因此它们实际上发送的是利用 Closure Compiler 执行的重命名的缩小 JSON。通过这种方式,您可以更改 Controller 和脚本上的变量或属性的名称,添加更多内容等,并且缩小从脚本一直返回到 Controller 输出。您的所有源代码(包括 Controller)都将继续保持非缩小且易于阅读。

关于javascript - 防止 Google Closure Compiler 重命名设置对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7823811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com