从 coffeescript 编译到 javascript 后保持缩进

Keeping indent after compiling from coffeescript to javascript?

本文关键字:缩进 javascript coffeescript 编译      更新时间:2023-09-26

我有文件 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);

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

除了几个简单的选项(例如 --bare )。

你关心你的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 打印令牌,则会得到:

[标识符角度] [= =] [{ {] [标识符模块] [: ::标识符模块] [: ::标识符 ] [-> ->] [缩进 2] [缩进 2] [} }] [终结符 '] [标识符角度] [. .] [标识符模块] [CALL_START (] [字符串"应用"] [, ,] [[] [缩进 4] [字符串 'ngAnimate'] [, ,] [终止符 '] [字符串"角度加载条"] [, ,] [终止符 '] [字符串"ui.router"] [, ,] [终止符 '] [字符串 'oc.lazyLoad'] [, ,] [终止符 '] [

字符串 'ui.bootstrap'] [, ,] [终止符 '] [字符串 'ng资源'] [缩进 4] [] ]] [CALL_END )] [终结者 ']

它确实将换行符存储为 [TERMINATOR 'n] .编写(和调试!)一个这样做的工具不一定容易,而且超出了堆栈溢出答案的范围;-)