谷歌闭包编译器,PRETTY_PRINT和对象文字

时间:2012-09-03 10:53:18

标签: javascript json google-closure-compiler object-literal

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

这样的东西
var ojb = {
    foo: {
        bar: 'baz'
    },
    quux: [
        { /* stuff */ },
        { /* stuff */ }
    ]
};

我将谷歌闭包编译器与选项--formatting=PRETTY_PRINT--compilation_level=WHITESPACE_ONLY结合使用,因为我只想让它“清理”输出(删除注释,统一大括号......)但我找到了它“内联”了对象文字:输出包含

 var obj = {"foo":{"bar":"baz"},"quux":[{...},{...}]};

“难以辨认”。

有没有办法告诉编译器在各行上跨越对象文字(理想情况下我想要像http://jsonlint.com的输出那样的语法)

1 个答案:

答案 0 :(得分:1)

好吧,既然我的评论 是你问题的实际答案,我会在这里发布:
WHITESPACE_ONLY汇编可能是最不具侵入性的编译模式但正如文档明确指出的那样:

  

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

来自the docs, on compilation modes。正如您可以在此页面上阅读的那样,WHITESPACE_ONLY编译将返回所有模式中最易读的代码。所有其他模式执行WHITESPACE_ONLY编译,除此之外还要执行其他操作。
回答您的问题:不,没有办法告诉编译器为某些代码留下过多的空白区域,并在代码的其他部分发疯。您可以做的唯一事情就是编写一个脚本,它提取您想要保留的对象文字,并将它们保存到单独的文件中。编译原始文件后,您可以将这些对象文字的内嵌版本替换为“白色空间重”对应文本。

但是既然你非常热衷于保持代码的可读性,我强烈建议缩小任何内容,或者使用控制台中的漂亮打印按钮,与控制台为您提供检查对象的其他整洁功能缠绕在一起。
更好的方法是:编写代码,并对其进行广泛测试,只缩小/编译进行生产(IE:完成编码/调试时)。毕竟,这就是使用这些工具的方式。