带有导出对象的 JSDoc CommonJS 传递到 IIFE
JSDoc CommonJS with exports object passed into IIFE
更新:@spenibus 帮助我得出结论,这可能是 JSDoc 本身的问题。我将我的发现添加到他们 GitHub 的 this open issue 中。 @spenibus 找到了一个解决方案,但它需要稍微修改一下 IIFE
的版本
我在 CommonJS 模块中使用 IIFE,以便能够与 CommonJS 一起工作,如果 module.exports 对象不存在,则回退到将接口分配给 window 对象。我如何正确记录这一点,以便将传入的导出对象视为 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
);
虽然 JSDoc issue 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
的对象,并简单地修改它引用的内容。
Nodejs 测试
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;
}"
Update 2015-08-13 05:10 +0000
Moved window exportation inside the IIFE to avoid extra exports
var laying around in html script.
更新:@spenibus 帮助我得出结论,这可能是 JSDoc 本身的问题。我将我的发现添加到他们 GitHub 的 this open issue 中。 @spenibus 找到了一个解决方案,但它需要稍微修改一下 IIFE
的版本我在 CommonJS 模块中使用 IIFE,以便能够与 CommonJS 一起工作,如果 module.exports 对象不存在,则回退到将接口分配给 window 对象。我如何正确记录这一点,以便将传入的导出对象视为 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
);
虽然 JSDoc issue 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
的对象,并简单地修改它引用的内容。
Nodejs 测试
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;
}"
Update 2015-08-13 05:10 +0000
Moved window exportation inside the IIFE to avoid extraexports
var laying around in html script.