加载中...

AMD Modules(模块)


Overview(概述)

JSDoc3 可以使用异步模块定义(AMD)API记录模块,这是由库实现的,如RequireJS。本页面说明根据您的模块使用的编码约定,如何使用JSDoc记录AMD模块。

如果你记录CommonJS或 Node.js的模块,见CommonJS 模块的说明。

Module identifiers(模块标识符)

当您记录一个AMD模块时,你要使用 @exports 标签或@module 标签 来记录真实传递给require()函数的标识符。例如,如果用户通过调用require('my/shirt', /* callback */)来加载该模块,你会写一个包含@exports my/shirt@module my/shirt标签的JSDoc注释。下面的例子可以帮助你决定使用哪些标签。

如果你使用不带值的@exports@module 标签,JSDoc会基于文件路径尝试猜测正确的模块标识符。

当您使用 JSDoc namepath(名称路径)从另一个JSDoc注释中引用一个模块,您必须添加前缀module:。例如,如果你想模块my/pants的文档 连接到模块my/shirt,您可以使用@see 标签来描述my/pants,如下:

  1. /**
  2. * Pants module.
  3. * @module my/pants
  4. * @see module:my/shirt
  5. */

同样,模块中每个成员的namepath (名称路径)将以module: 开始:,后面跟模块名字。例如,如果你的my/pants模块输出一个Jeans构造函数,并且Jeans 有一个名为hem的实例方法,那么这个实例方法longname(长名称)是module:my/pants.Jeans#hem

Function that returns an object literal(函数返回一个对象字面量)

如果你定义AMD模块作为一个函数,该函数返回一个对象字面量, 使用@exports 标签来记录模块的名称。JSDoc会自动检测该对象的属性是模块的成员。

例如,函数返回一个对象字面量:

  1. define('my/shirt', function() {
  2. /**
  3. * A module representing a shirt.
  4. * @exports my/shirt
  5. */
  6. var shirt = {
  7. /** The module's `color` property. */
  8. color: 'black',
  9. /** @constructor */
  10. Turtleneck: function(size) {
  11. /** The class' `size` property. */
  12. this.size = size;
  13. }
  14. };
  15. return shirt;
  16. });

Function that returns another function(函数返回另一个函数)

如果你定义模块作为一个函数,导出的另一个函数,比如构造函数,你可以使用一个独立的带有@module 标签的注释来记录模块。然后,您可以使用一个@alias 标签告诉JSDoc该函数使用相同的longname(长名称)作为模块。

例如,函数返回另一个函数:

  1. /**
  2. * A module representing a jacket.
  3. * @module my/jacket
  4. */
  5. define('my/jacket', function() {
  6. /**
  7. * @constructor
  8. * @alias module:my/jacket
  9. */
  10. var Jacket = function() {
  11. // ...
  12. };
  13. /** Zip up the jacket. */
  14. Jacket.prototype.zip = function() {
  15. // ...
  16. };
  17. return Jacket;
  18. });

Module declared in a return statement (模块声明在return语句中)

如果你在一个函数的return语句中声明你的模块对象,你可以使用一个独立的带有@module 标签的注释来记录模块。然后,您可以使用一个@alias 标签告诉JSDoc该函数使用相同的longname(长名称)作为模块。

例如,模块声明在return语句中:

  1. /**
  2. * Module representing a shirt.
  3. * @module my/shirt
  4. */
  5. define('my/shirt', function() {
  6. // Do setup work here.
  7. return /** @alias module:my/shirt */ {
  8. /** Color. */
  9. color: 'black',
  10. /** Size. */
  11. size: 'unisize'
  12. };
  13. });

Module object passed to a function(模块对象传递给一个函数)

如果模块对象传递到定义你的模块的函数,你可以通过给函数参数添加@exports 标签来记录模块。这种模式在JSDoc3.3.0及更高版本中支持。

例如,模块对象传递给一个函数:

  1. define('my/jacket', function(
  2. /**
  3. * Utility functions for jackets.
  4. * @exports my/jacket
  5. */
  6. module) {
  7. /**
  8. * Zip up a jacket.
  9. * @param {Jacket} jacket - The jacket to zip up.
  10. */
  11. module.zip = function(jacket) {
  12. // ...
  13. };
  14. });

Multiple modules defined in one file(多模块定义在一个文件中)

如果你在一个单一的JavaScript文件中定义多个AMD模块,你应该使用@exports 标签来记录每个模块对象。

例如,多模块定义在一个文件中:

  1. // one module
  2. define('html/utils', function() {
  3. /**
  4. * Utility functions to ease working with DOM elements.
  5. * @exports html/utils
  6. */
  7. var utils = {
  8. /** Get the value of a property on an element. */
  9. getStyleProperty: function(element, propertyName) { }
  10. };
  11. /** Determine if an element is in the document head. */
  12. utils.isInHead = function(element) { }
  13. return utils;
  14. }
  15. );
  16. // another module
  17. define('tag', function() {
  18. /** @exports tag */
  19. var tag = {
  20. /** @class */
  21. Tag: function(tagName) {
  22. // ...
  23. }
  24. };
  25. return tag;
  26. });

还没有评论.