Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript google闭包编译器、漂亮的打印和对象文字_Javascript_Json_Google Closure Compiler_Object Literal - Fatal编程技术网

Javascript google闭包编译器、漂亮的打印和对象文字

Javascript google闭包编译器、漂亮的打印和对象文字,javascript,json,google-closure-compiler,object-literal,Javascript,Json,Google Closure Compiler,Object Literal,我有一个file.js文件,其中有一个变量的值是(嵌套的)对象文字。差不多 var ojb = { foo: { bar: 'baz' }, quux: [ { /* stuff */ }, { /* stuff */ } ] }; 我将google closure compiler与选项--formatting=PRETTY\u PRINT和--compilation\u level=WHITESPACE\u O

我有一个file.js文件,其中有一个变量的值是(嵌套的)对象文字。差不多

var ojb = {
    foo: {
        bar: 'baz'
    },
    quux: [
        { /* stuff */ },
        { /* stuff */ }
    ]
};
我将google closure compiler与选项
--formatting=PRETTY\u PRINT
--compilation\u level=WHITESPACE\u ONLY
结合使用,因为我只希望它“清理”输出(删除注释,统一大括号…),但我发现它“内联”了对象文字:输出包含

 var obj = {"foo":{"bar":"baz"},"quux":[{...},{...}]};
这是“难以辨认的”

有没有办法告诉编译器跨越不同行上的对象文本(理想情况下,我需要的是类似的输出语法)

好吧,因为我的注释是对您问题的实际答案,我将在这里发布:
在所有编译模式中,
仅空格
编译可能是入侵性最小的,但正如文档中明确指出的:

纯空白编译级别删除代码中的注释,还删除换行符、不必要的空格和其他空白。输出JavaScript在功能上与源JavaScript相同

从。正如您在本页上所读到的,
WHITESPACE\u ONLY
编译返回所有模式中最易于阅读的代码。所有其他模式只执行
空白_
编译,并执行除此之外的其他操作。
回答您的问题:不,没有办法告诉编译器为某些代码保留过多的空白,并对代码的其他部分发疯。您唯一能做的就是编写一个脚本,提取您想要保留的对象文本,并将它们保存到一个单独的文件中。编译原始文本后,可以将这些对象文本的内嵌版本替换为它们的“大量空白”对应项


但是,既然您如此热衷于保持代码的可读性,我强烈建议您不要缩小任何内容,或者使用控制台中的“漂亮打印”按钮,并结合控制台提供的其他整洁功能来检查对象
一种更好的方法是:编写代码,并对其进行广泛测试,并且只针对生产进行缩小/编译(即:当您完成编码/调试时)。毕竟,这就是这些工具的用途。

你说得对,但我在生产中使用“仅空白”:有时我们需要在生产中仔细检查bug,或者更新一些配置(变量是“配置对象”)。当需要部署一些(微小的)更改时,我需要传递一个带有修改的补丁文件。不幸的是,当配置对象是如此内联时,diff不像“非内联”版本上的diff那样明显。。。如果google closure compiler没有选项,我需要一个工具来“删除”这个文件中的注释…@VitoDeTullio:我想你又回到了编写自己的脚本的时候了。虽然您可以使用for Inspiration,但如果您想提交一个在打印时更好地处理对象文字的修补程序,我会支持它。@John:加入俱乐部:),我有自己的脚本(用Perl编写),但它非常完美。。。也许这个周末我会为它建立一个github。这不是一个承诺,只是一个可能:-p你不应该改用JavaScript美化器吗?将闭包输出传递给在线美化器。