利用docstrings
这是一个新手问题,但我没有设法谷歌任何合理简洁,但在这个问题上的启发。 我有Sublime Text
编辑器和一个很好的插件DocBlockr
https://github.com/spadgos/sublime-jsdocs ,它使适当的评论小菜一碟。 完成评论后,我该怎么做? 至less,我希望能够在REPL中调用注释。 还有什么其他文件可用? 我想要一些轻量级和容易的,中等脚本。
编辑:
var helper = exports.helper = (function() { ... /** * Reduces a sequence of names to initials. * @param {String} name Space Delimited sequence of names. * @param {String} sep A period separating the initials. * @param {String} trail A period ending the initials. * @param {String} hyph A hypen separating double names. * @return {String} Properly formatted initials. */ function makeInits(name, sep, trail, hyph) { function splitBySpace(nm) { return nm.trim().split(/\s+/).map(function(x) {return x[0]}).join(sep).toUpperCase(); } return name.split(hyph).map(splitBySpace).join(hyph) + trail; } /** * Reduces a sequence of names to initials. * @param {String} name Space delimited sequence of names. * @return {String} Properly formatted initials. */ function makeInitials(name) { return makeInits(name, '.', '.', '-'); } ... })();
使用$ jsdoc src.js
没有错误,但只生成虚拟头文件。
当你写这个
function bar (foo) { return foo + foo; }
如果你将光标放在function
上面,当你按«Enter»时你会写/**
,你会得到这个:
/** * [bar description] * @param {[type]} foo [description] * @return {[type]} [description] */ function bar (foo) { return foo + foo; }
有很多相似的短处。
例如,如果将光标置于@param {[type]} foo [description]
,按«Enter»将创build一个新的*
行,写@
将会提示您(在intellisense中)所有的JSDoc注释和validation创build一个完整的行。
当您的文件被正确logging时,只需使用jsdoc
CLI来创build文档。
文档: http : //usejsdoc.org/
编辑:我只是意识到你的问题的反应是在你的https://github.com/spadgos/sublime-jsdocs链接,所以也许你想知道如何生成文档,所以…
安装Node.js并使用CLI命令
npm install jsdoc -g
然后,假设文件名是foo.js
,运行以下命令:
jsdoc foo.js
这将创build一个文件进入out
目录。
所有CLI文档生成doc在这里: http : //usejsdoc.org/about-commandline.html
在全球
要允许JSDoc模板生成你的文档,你必须添加@function
属性和你的函数的名字。 你的两个函数将出现在模板的Global部分。
jsdoc your-exemple.js
但是,由于你的函数被限制在一个匿名函数中(但是暂时没有模块),你可以添加@private函数来通知这个函数并不是全局的,而只是在它的范围内可以访问的。 但是,因为默认JSDoc生成器模板忽略--private
函数,添加 – --private
选项。
jsdoc your-exemple.js --private
所以你的代码看起来像这样。
(function () { "use strict"; // ... /** * Reduces a sequence of names to initials. * @function makeInits * @private * @param {String} name Space Delimited sequence of names. * @param {String} sep A period separating the initials. * @param {String} trail A period ending the initials. * @param {String} hyph A hypen separating double names. * @return {String} Properly formatted initials. */ function makeInits(name, sep, trail, hyph) { function splitBySpace(nm) { return nm.trim().split(/\s+/).map(function (x) { return x[0]; }).join(sep).toUpperCase(); } return name.split(hyph).map(splitBySpace).join(hyph) + trail; } /** * Reduces a sequence of names to initials. * @function makeInitials * @private * @param {String} name Space delimited sequence of names. * @return {String} Properly formatted initials. */ function makeInitials(name) { return makeInits(name, '.', '.', '-'); } // ... }());
入类
如果你将匿名闭包的内容暴露给一个variablesvar Helper
,它可能是一个Class。 因此,您的代码将不会成为全局内容的一部分,而是@class
类的一部分,后面是类名称。 而且,因为你将提供你的function对类模块,你不需要声明function为私人。
但是你解释了你以前的function是类的一部分,所以你必须使用@memberOf
属性的完整path。
- 结束
.
如果它是一个静态成员(通过返回公开)。 - 如果这是一个方法instanciable(通过这个暴露)结束
#
。 - 如果它是一个私有函数(和
@private
),@private
~
结尾。
所以
/** * Helper Class * @Class Helper */ var Helper = (function () { "use strict"; // ... /** * Split by Space * @function privateExemple * @private * @memberOf Helper~ * @return {String} ... */ function privateExemple() { return ""; } /** * Reduces a sequence of names to initials. * @function makeInits * @memberOf Helper. * @param {String} name Space Delimited sequence of names. * @param {String} sep A period separating the initials. * @param {String} trail A period ending the initials. * @param {String} hyph A hypen separating double names. * @return {String} Properly formatted initials. */ function makeInits(name, sep, trail, hyph) { function splitBySpace(nm, sep) { return nm.trim().split(/\s+/).map(function (x) { return x[0]; }).join(sep).toUpperCase(); } return name.split(hyph).map(splitBySpace).join(hyph) + trail; } /** * Reduces a sequence of names to initials. * @method makeInitials * @memberOf Helper# * @param {String} name Space delimited sequence of names. * @return {String} Properly formatted initials. */ this.makeInitials = function makeInitials(name) { return makeInits(name, '.', '.', '-'); } // ... return { makeInits: makeInits }; }());
入Molule
但是,在你的情况下,你使用exports
,这意味着你的文件是一个模块。 所以你必须用@module
和名字来描述这个。 所以,你以前评论过的所有内容都不是Global的一部分,但现在是你的模块的一部分。 而且因为你将会在Helper模块后面提供你的函数,所以你不需要声明这个函数是私有的。
/** * Helper Module * @module Helper */ exports.helper = (function () { "use strict"; // ... /** * Reduces a sequence of names to initials. * @function makeInits * @memberOf module:helper. * @param {String} name Space Delimited sequence of names. * @param {String} sep A period separating the initials. * @param {String} trail A period ending the initials. * @param {String} hyph A hypen separating double names. * @return {String} Properly formatted initials. */ function makeInits(name, sep, trail, hyph) { function splitBySpace(nm) { return nm.trim().split(/\s+/).map(function (x) { return x[0]; }).join(sep).toUpperCase(); } return name.split(hyph).map(splitBySpace).join(hyph) + trail; } /** * Reduces a sequence of names to initials. * @function makeInitials * @private * @memberOf module:helper~ * @param {String} name Space delimited sequence of names. * @return {String} Properly formatted initials. */ function makeInitials(name) { return makeInits(name, '.', '.', '-'); } // ... return { makeInitials: makeInitials }; }());
模块和类
但是,因为您通过var Helper
作为Class公开,并且通过exports
作为Module,您可以以两种方式进行文档化。
/** * Helper Class * @class Helper * @memberOf module:helper~ * @see {@link module:helper|Module} */ var Helper = (function () { "use strict"; // ... /** * Reduces a sequence of names to initials. * @function makeInits * @memberOf module:helper. * @param {String} name Space Delimited sequence of names. * @param {String} sep A period separating the initials. * @param {String} trail A period ending the initials. * @param {String} hyph A hypen separating double names. * @return {String} Properly formatted initials. */ function makeInits(name, sep, trail, hyph) { function splitBySpace(nm) { return nm.trim().split(/\s+/).map(function (x) { return x[0]; }).join(sep).toUpperCase(); } return name.split(hyph).map(splitBySpace).join(hyph) + trail; } /** * Reduces a sequence of names to initials. * @function makeInitials * @private * @memberOf module:helper~ * @param {String} name Space delimited sequence of names. * @return {String} Properly formatted initials. */ function makeInitials(name) { return makeInits(name, '.', '.', '-'); } // ... return { makeInitials: makeInitials }; }()); /** * helper Module * @module helper */ exports.helper = Helper;
命名空间或类?
Class和Namespace之间的区别只是通过this
类暴露了一些对象/函数,并且是可以实现的。 如果没有附加到这个,你可能有一个名称空间,所以只需要@namespacereplace@class,该代码将被放置到适当的命名空间部分。
你还要检查你的类是不是一个Mixin(只是跨过Class而不是直接使用)或者一个接口(定义但不是实现),如果它是其他类的@extend。
等等
请参阅文档: http : //usejsdoc.org/index.html
在你的页面中: https : //github.com/Tyrn/js-procr/blob/master/procr/pcn.js
您有以下行:
if (require.main !== module) return false;
这会产生以下错误: ERROR. Unable to parse xxx Line 291: Illegal return statement
ERROR. Unable to parse xxx Line 291: Illegal return statement
。
这是因为在全球范围内不允许任何return
,所以使用这个保证:
if (require.main === module) { main.copyAlbum(); }
而且所有的文档都会像魅力一样产生。
其实,我不知道为什么你的jsdoc命令在你的环境中不会产生任何错误。