5

更新:@spenibus 帮助我得出结论,这可能是 JSDoc 本身的问题。我在他们的 GitHub 上将我的发现添加到这个未解决的问题中。@spenibus 找到了一个解决方案,但它需要稍微修改版本的 IIFE

我在 CommonJS 模块中使用 IIFE 以便能够与 CommonJS 一起工作,并且如果 module.exports 不存在,则回退到将接口分配给窗口对象。如何正确记录这一点,以便将传入的导出对象视为 module.exports?

/**
 * This is a description
 * @module someModule
 */
(function (exports) {

    /**
     * Returns true if something.
     * @param {String} type
     * @returns {boolean}
     * @static
     */
    var isSomething = function isSomething(type){
        return true;
    };

    exports.isSomething = isSomething;

})(
    //if exports exists, this is a node.js environment so attach public interface to the `exports` object
    //otherwise, fallback to attaching public interface to the `window` object
    (typeof exports === 'undefined') ?
         window
        : exports
);
4

1 回答 1

3

虽然JSDoc 问题 456似乎相关,但我们还没有得到任何帮助。

我看了一下Use JSDoc: @alias,虽然很有希望,但没有提供相同的 JSDoc 输出。

然后我尝试了一些简单的方法,让我在脑海中播放 FF7 的胜利主题,也就是成功了:

/**
 * This is a description
 * @module someModule
 */

(function() {

    // export to window when not used as a module
    if(typeof exports === 'undefined') {
        var exports = window;
    }

    /**
     * Returns true if something.
     * @param {String} type
     * @returns {boolean}
     * @static
     */
    exports.isSomething = function(type){
        return true;
    };
})();

在项目目录上使用jsdoc ./会产生与我没有使用 IIFE 相同的输出。基本思想是始终有一个对象命名exports并简单地修改它引用的内容。

节点测试

var mm = require('./module.js');

console.log('--Testing nodejs--');
console.log(mm);

输出:

--Testing nodejs--
{ isSomething: [Function] }

html脚本测试

<script src="module.js"></script>
<script>
    console.log('--html script test--');
    console.log(isSomething.toString());
</script>

输出:

"--html script test--"
"function (type){
    return true;
}"

更新 2015-08-13 05:10 +0000
在 IIFE 内移动窗口导出以避免exports在 html 脚本中放置额外的 var。

于 2015-08-10T17:48:36.697 回答