2

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

var ojb = {
    foo: {
        bar: 'baz'
    },
    quux: [
        { /* stuff */ },
        { /* stuff */ }
    ]
};

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

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

这是“难以辨认”。

有没有办法告诉编译器在不同的行上跨越对象文字(理想情况下,我想要一个类似http://jsonlint.com输出的语法)

4

1 回答 1

1

好吧,由于我的评论对您问题的实际答案,因此我将在此处发布:
编译WHITESPACE_ONLY很可能是所有编译模式中侵入性最小的,但正如文档明确指出的那样:

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

来自文档,关于编译模式。正如您在此页面上所读到的,WHITESPACE_ONLY编译返回所有模式中最易读的代码。所有其他模式都执行WHITESPACE_ONLY编译,除此之外还做其他事情。
回答您的问题:不,没有办法告诉编译器为某些代码保留过多的空白,而对代码的其他部分发疯。您唯一能做的就是编写一个脚本,提取您想要保留的对象文字并将它们保存到单独的文件中。编译原始版本后,您可以将这些对象文字的内联版本替换为“大量空白”的对应版本。

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

于 2012-09-03T11:39:42.157 回答