如何使用JSDoc记录CoffeeScript源代码?

azt*_*ack 44 javascript google-closure-compiler jsdoc coffeescript

我有一些用CoffeeScript编写的代码,我想用Google Closure Compiler优化生成的JavaScript,所以这些文件需要用JSDoc记录.

我的问题是,如何记录*.coffee文件以生成包含用于闭包编译器的工作JSDoc的javascript?

还有一个问题:有没有办法在*.coffee中保留单行注释?

Bil*_*oon 77

CoffeeScript输入:

### define function variable before block to avoid code being appended to closing part of JSDoc comment ###
cube = null

###*
 * Function to calculate cube of input
 * @param {number} Number to operate on
 * @return {number} Cube of input
 ###

cube = (x) -> x*x*x
Run Code Online (Sandbox Code Playgroud)

Windows cmd提示的JavaScript输出: coffee -cpb src.coffee

// Generated by CoffeeScript 1.6.3
/* define function variable before block to avoid code being appended to closing part of JSDoc comment*/

var cube;

cube = null;

/**
 * Function to calculate cube of input
 * @param {number} Number to operate on
 * @return {number} Cube of input
*/

cube = function(x) {
  return x * x * x;
};
Run Code Online (Sandbox Code Playgroud)

编辑

正如其他答案中详述的那样,CoffeeScript 1.7.1有更好的方法可以解决这个问题.

  • 注意:Coffeescript编译器在注释后添加空格,因此,一些解析器可能不会将其识别为JSDoc,我认为(根据其他文档工具的经验),应该是方法定义开始之前的线 (4认同)

mik*_*att 33

由于我不能直接回复上面的Billy,似乎CoffeeScript 1.7.1对此有更好的支持:

###*
# Sets the language and redraws the UI.
# @param {object} data Object with `language` property
# @param {string} data.language Language code
###

handleLanguageSet: (data) ->
Run Code Online (Sandbox Code Playgroud)

输出

/**
 * Sets the language and redraws the UI.
 * @param {object} data Object with `language` property
 * @param {string} data.language Language code
 */
handleLanguageSet: function(data) {}
Run Code Online (Sandbox Code Playgroud)


Jac*_*son 6

你必须进行实验(很多),但###评论是你的朋友.

咖啡脚本编译器将保留使用该###表单的注释(此处为 docs ).

我尝试JsDoc使用网站上的'try coffeescript'功能为函数创建一个非常简单的片段:

###* Doc for this function.###
foo = -> 'bar'
Run Code Online (Sandbox Code Playgroud)

这给了:

/** Doc for this function.
*/
var foo;
foo = function() {
   return 'bar';
 };
Run Code Online (Sandbox Code Playgroud)

我不是专家JsDoc,但我猜var foo;这个函数上面的语句会产生问题.如果您foo之前已经宣布过,也许..

听听它是怎么回事真好.


Tre*_*ham 2

我建议不要这样做。对所有代码进行 JSDoc 编译是一个费力的过程,闭包编译器可能不会带来什么好处。除了谷歌本身之外,几乎没有人这样做。CoffeeScripters/JavaScripters 通常更喜欢轻量级文档工具,例如docco

此外,虽然 Closure Compiler 背后有 Google 品牌名称,但 UglifyJS在许多情况下已被证明是更有效的缩小工具。(jQuery最近改用它。)

还有一个问题:有没有一种方法可以在 *.coffee 中保留单行注释?

是的:

### foo ###
Run Code Online (Sandbox Code Playgroud)

或者

`// foo`
Run Code Online (Sandbox Code Playgroud)

  • JSDoc 有许多好处,超出了闭包编译器优化的范围,可以说比制作美观的编译文档更重要。如果您使用 JSDoc,一个好的 IDE 可以编码和输入提示、给出警告/错误,并使 @see/@link 可导航。考虑到无数错误的根源要么是缺乏签名,要么是缺乏遵守,我认为 JSDoc 在任何 JS 中都很重要,无论是否精简(并且有一些 IDE,例如 PHPStorm 也很乐意在 CoffeeScript 上下文中消化它) 。 (18认同)
  • 这个“答案”忽略了这个问题,只表达个人观点。 (13认同)
  • 另外,不要太逆反,但 docco 到底是如何像你所说的“轻量级文档”呢?它需要第三方组件、额外的配置、添加到构建例程中的另一个编译例程,最糟糕的是开发人员需要额外的关注来生成漂亮的、大而臃肿的注释,这些注释在原始源代码的上下文中不起作用(请参阅 JSDoc上面的论据)。 (4认同)
  • 当在高级模式下使用时,google 闭包编译器提供无与伦比的压缩和执行速度。请参阅 http://jsperf.com/testing-code-performance-by-compression-type 上的基准测试 (2认同)