从coffeescript到javascript编译后保持缩进?

时间:2016-03-20 11:38:19

标签: javascript coffeescript

我有app.coffee文件

angular
  .module('app', [
    'ngAnimate',
    'angular-loading-bar',
    'ui.router',
    'oc.lazyLoad',
    'ui.bootstrap',
    'ngResource'
  ])

当我将其编译为javascript时,它看起来像这样

// Generated by CoffeeScript 1.10.0
(function() {
  angular.module('app', ['ngAnimate', 'angular-loading-bar', 'ui.router', 'oc.lazyLoad', 'ui.bootstrap', 'ngResource']);

}).call(this);

有什么方法可以保持缩进吗?

1 个答案:

答案 0 :(得分:0)

除了一些简单的选项(例如--bare)之外,无法修改CoffeeScript编译器的输出。

您是否关心C程序生成的汇编代码是什么样的?或者Python程序的字节码?通常你没有,你只是很少看它来调试特定的问题。 CofeeScript生成的JavaScript代码是相同的。接受编译的JS代码不是供人类使用的。当然,它的格式是你可以读取它来调试问题(这很好),但这不是主要关注点。

话虽这么说,你可以通过外部格式化工具运行它,但是它们如何区分这两个数组:

angular
  .module('app', [
    'ngAnimate',
    'angular-loading-bar',
    'ui.router',
    'oc.lazyLoad',
    'ui.bootstrap',
    'ngResource'
  ])

one_line_array = ['ngAnimate', 'angular-loading-bar']

除了使用JS代码 CoffeeScript代码之外别无他法。

如果你真的想要这个,你需要修改CoffeeScript源,或编写自己的工具来分析CofeeScript源并相应地修改JavaScript输出。如果您使用coffee --tokens打印令牌,则会获得:

  

[IDENTIFIER angular] [= =] [{{] [IDENTIFIER模块] [::] [ - > - >] [INDENT 2] [OUTDENT 2] [}}] [TERMINATOR \ n] [IDENTIFIER angular] [。 。] [IDENTIFIER模块] [CALL_START(] [STRING'app'] [,,] [[[] [INDENT 4] [STRING'ngAnimate'] [,,] [TERMINATOR \ n] [STRING'angular angle loading- bar'] [,,] [TERMINATOR \ n] [STRING'ui.router'] [,,] [TERMINATOR \ n] [STRING'oc.lazyLoad'] [,,] [TERMINATOR \ n] [STRING'ui .bootstrap'] [,,] [TERMINATOR \ n] [STRING'ngResource'] [OUTDENT 4] []]] [CALL_END]] [TERMINATOR \ n]

将换行存储为[TERMINATOR \n]。编写(和调试!)这样做的工具虽然不一定容易,但超出了Stack Overflow答案的范围; - )