You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSDoc是否识别成员赋值?如何隐藏私有成员生成文档?

如何为分离公开/私有成员的Node.js包生成JSDoc(避免重复编写文档)

首先明确你的场景:你把核心逻辑放在私有模块lib/private.js里,通过lib/index.js导出公开函数,但遇到两个问题:

  • 直接运行jsdoc lib/index.js没有生成任何文档
  • 运行jsdoc lib会把私有模块里的internalFunc也显示出来,不符合隐藏私有成员的需求
    而且你不想把private.js里的文档复制到index.js里——这完全可以通过JSDoc的标记和配置来解决。

解决方案1:用@alias关联私有函数到公开导出

这是最直接的方法,不用修改太多代码,只需要在private.js的函数注释里加上@alias标记,把它和公开导出的函数绑定:

修改lib/private.js的代码:

/**
 * My private function
 *
 * @param {string} foo some foo
 * @return {number} bar value
 * @alias module:lib.publicFunc
 */
exports.internalFunc = foo => 42;

这里的module:lib.publicFunc对应index.js导出的publicFunc(lib是模块根目录,因为index.js是入口)。

之后运行jsdoc lib/index.js,JSDoc就会把internalFunc的文档关联到publicFunc上,生成正确的公开函数文档。

解决方案2:配合配置文件排除私有模块

如果你不想让JSDoc扫描私有模块,可以创建一个jsdoc.json配置文件,指定只处理公开入口,排除私有文件:

{
  "source": {
    "include": ["lib/index.js"],
    "exclude": ["lib/private.js"]
  },
  "opts": {
    "destination": "./docs"
  }
}

运行命令:

jsdoc -c jsdoc.json

注意:这个方法需要和解决方案1配合,否则index.js里只有导出语句,没有文档注释,JSDoc还是生成不了内容。

解决方案3:用@ignore隐藏私有函数

如果需要扫描整个lib目录但不想显示私有成员,可以给private.js里的internalFunc加上@ignore标记,同时用@alias关联到公开导出:

/**
 * My private function
 *
 * @param {string} foo some foo
 * @return {number} bar value
 * @alias module:lib.publicFunc
 * @ignore
 */
exports.internalFunc = foo => 42;

然后运行jsdoc lib,JSDoc会忽略internalFunc的独立文档,但会把它的内容关联到publicFunc上,最终只显示公开函数的文档。

解决方案4:用@see引用私有函数文档

如果你不想修改私有模块的注释,可以在index.js里给导出的publicFunc加一个@see标记,指向私有函数的文档:

/**
 * @see module:lib/private.internalFunc
 */
exports.publicFunc = require('./private').internalFunc;

然后给private.js里的internalFunc加上@ignore标记,运行jsdoc lib后,publicFunc的文档会显示指向私有函数的引用,同时私有函数本身不会出现在最终文档里。

总结

最推荐的组合是解决方案1 + 解决方案3:用@alias把私有函数的文档绑定到公开导出,再用@ignore隐藏私有成员,这样既不用重复写文档,又能精准控制生成的内容。

内容的提问来源于stack exchange,提问作者Franklin Yu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:07:55