46

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

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

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

4

5 回答 5

79

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

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;
};

编辑

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

于 2012-02-06T08:12:38.907 回答
35

由于我无法直接回复上面的比利,看来 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) ->

输出

/**
 * Sets the language and redraws the UI.
 * @param {object} data Object with `language` property
 * @param {string} data.language Language code
 */
handleLanguageSet: function(data) {}
于 2014-06-22T07:02:25.057 回答
6

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

咖啡脚本编译器将保留使用表单的注释(此处###的文档)。

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

###* Doc for this function.###
foo = -> 'bar'

这给了:

/** Doc for this function.
*/
var foo;
foo = function() {
   return 'bar';
 };

我不是专家JsDoc,但我猜var foo;函数上面的语句会产生问题。如果你之前foo声明过,也许……

很高兴听到它的进展情况。

于 2011-10-20T14:59:52.867 回答
2

我建议不要这样做。对所有代码进行 JSDoc 处理是一个费力的过程,很可能从 Closure 编译器中几乎没有收益。在谷歌本身之外,几乎没有人这样做。CoffeeScripters/JavaScripters 通常更喜欢像docco这样的轻量级文档工具。

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

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

是的:

### foo ###

或者

`// foo`
于 2011-10-20T15:02:18.693 回答
0

class有问题

###* this is a class ###
class hello
    v: 4

给出了那个

// Generated by CoffeeScript 2.0.0-beta5
/** this is a class */
var hello;

hello = (function() {
  class hello {};

  hello.prototype.v = 4;

  return hello;

})();

并且在 JSDoc 中无效

于 2017-09-08T12:29:01.200 回答