将 JsDoc3 用于大型应用程序,如何将模块分组为部分/类别/子模块

2024-04-04

我正在开发一个应用程序,随着时间的推移,它会变得相当庞大。我决定使用JsDoc3 and DocStrap记录所有模块。模块是通过 require.js 定义的,在某些地方它们的嵌套深度可达 3 或 4 层。

到目前为止,我了解到 JsDoc 文档分为四个主要部分:模块、类、教程、全局。每个部分都有一个标题下拉菜单和一个侧边栏,每个部分都以线性方式按字母顺序列出所有模块。

我想知道是否有选项可以以某种方式显示/分组模块和类以反映项目结构。我看到一个 git 存储库,其中记录了所有带有大量斜杠的类module1/submodule1/class1,但感觉确实要消化这种类型的导航。更不用说布局在侧边栏溢出长标题时遇到了麻烦。

目前我有一个类似于下面的架构的项目布局。它又宽又深,我希望它能进一步发展。

/Editor
---/Services
------/UI
------...
---...
---editorApp.js
/Engine
---/Core
------/...
---/Entities
------/...
---/Graphics
------/...
---/...
...
engine.js
/Web
---/Services
------/UI
------...
---...
---webApp.js

很好的问题。我也遇到了同样的问题。

I use 命名空间将类组合到一个包中。一个大项目可能有多个命名空间。 Areally大项目可以有命名空间,其成员本身就是命名空间。

命名空间基本上是一组静态对象。您可以使用@namespace记录不应构造的对象文字或“静态类”,例如本机Math class.

不幸的是有没有简单的方法将模块标记为命名空间的成员 https://stackoverflow.com/questions/29469819/jsdoc-what-is-a-relationship-between-modules-and-namespaces,所以我放弃了@module完全标记,仅使用@class and @namespace。关于模块的另一个非常烦人的事情是你必须在前面添加module:在 JSDoc 注释中每次提到模块的前面。例如。你必须做@type {module:my_mod}而不是仅仅@type {my_mod}.

所以你的项目的结构将如下所示:

编辑器.js

/**
 * description of Editor.
 * @namespace Editor
 */
 const Editor = {
   Services: require('./Services.js'),
   ...
 }
 module.exports = Editor

服务.js

/**
 * description of Services.
 * @namespace Editor.Services
 *            ^^^^^^^ shows it’s a member of Editor
 */
 const Services = {
   UI: require('./UI.js'),
   ...
 }
 module.exports = Services

UI.js(假设 UI 是一个类)

/**
 * description of UI.
 * @memberof Editor.Services
 * ^^^^^^^^^ need to tell JSDoc UI is a member
 * @class
 * ^^^^^^ optional, as JSDoc knows ES6 classes
 */
class UI {
  constructor() {...}
}
module.exports = UI
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 JsDoc3 用于大型应用程序,如何将模块分组为部分/类别/子模块 的相关文章

  • 如何以 JavaScript 编程方式获取旋转的 svg 文本边界

    我正在动态渲染 SVG 图像并创建旋转文本 如果旋转的文本与其他文本重叠 我需要删除该文本 但我无法测量旋转的文本来创建边界并检查下一个标签文本区域 我创建了 3 个 SVG 元素来解释 SVG 1 显示重叠的文本 SVG 2 显示重叠的旋
  • 如何使对象“a == b”的比较成立? [复制]

    这个问题在这里已经有答案了 这是面试前 JavaScript 在线测试的问题之一 function F var a new F var b new F Q 如何进行比较a b to be true e g console log a b t
  • 在承诺中运行同步函数

    我是 JS 和异步操作的新手 在使用express的nodeJS路由器中 我使用mongoose从mongo聚合了一些数据 该数据是每隔 15 分钟从不同站点收集的天气数据 我使用猫鼬聚合管道处理数据 以获取每小时数据并按每个站点进行分组
  • 如何检查变量是否是生成器函数? (例如函数*产量)[重复]

    这个问题在这里已经有答案了 检查函数是否是生成器的可靠方法是什么 例如 let fn function yield 100 if fn instanceof for let value in fn 我能想到的唯一方法是fn toString
  • ExtJS 4 用于选择所选值的组合框事件

    由于某种原因 我需要知道用户何时从组合框中选择了值 即使它已经被选择 仅当用户选择未选择的项目时 选择 事件才起作用 我在组合框或选择器的文档中没有看到任何类似 itemclick 的事件 有任何想法吗 ComboBox uses 绑定列表
  • Angular 2 测试 ng-content

    我想知道是否有办法测试ng content不创建宿主元素 例如 如果我有警报组件 Component selector app alert template div div
  • 如何抑制 IE9 window.close() 确认消息

    应用 window close 函数后 IE9 会引发 您正在查看的网页正在尝试关闭 消息 有没有办法在不更改应用程序代码的情况下 而是通过更改一些特定于 IE 的注册表项来抑制此消息 如果窗口不是由脚本打开的 IE 不允许在没有确认的情况
  • 将字符串数组转换为对象 Id 数组

    我有一个字符串数组 let stringObjectIdArray fssdlfsd343 43434234242 342424242 我想使用 mongoose 类型将字符串数组更改为对象 Id 数组 但它不起作用 它仅适用于字符串而不是
  • 在 Javascript 中获取文本框的值

    我有这个html代码 table border cellpadding 3 cellspacing 0 tbody tr td Song td td td tr tbody table
  • 显示来自 mongodb 的所有数据并在 doT.js 模板引擎中渲染它

    我想从 mongodb 中提取数据并将其传递给视图 一切似乎都正常 但我没有看到所有 10000 条记录都显示出来 而是只看到了一条 我觉得我非常接近解决它 但我陷入困境 我正在使用node mongodb native express和d
  • 如何在Android上获取角度中的按键事件?

    我们如何在 Android 上的 Angular 中获取按键事件及其值 我使用phonegap Cordova Angular JS
  • JavaScript 中的凯撒密码

    我正在尝试编写一个程序来解决javascript中的以下问题 写在本段下面 我不知道为什么我的代码不起作用 有人可以帮助我吗 我是 JavaScript 新手 这是一个免费的代码训练营问题 现代常见的用法是 ROT13 密码 其中字母的值移
  • Firestore——仅获取大型同步集合中已更改的文档

    我已阅读下面的所有问题 但在文档中找不到任何内容来描述如何同步集合和接收only更改集合中的文档 我的同步集合中有超过 500 个文档 使用redux saga firebase 同步集合 https redux saga firebase
  • 为什么发送 fetch() 时我的响应数据未定义?

    我正在尝试在客户端使用 fetch 将数据发布到我的 NodeJS 服务器或从我的 NodeJS 服务器发布数据 服务器很好地收到了 post 请求 我能够记录 req 变量 但是当我 res send any data 时 客户端无法检测
  • jquery 中 DOM 元素的手动垃圾回收是否可以提高浏览器性能?

    在性能范围内 删除不再需要的元素是否有意义 或者浏览器是否对代码中未进一步引用的 dom 元素执行自动垃圾收集 some element fadeOut 1000 function el el remove lt does this mak
  • ES6 模板文字可以在运行时替换(或重用)吗?

    tl dr 是否可以制作可重用的模板文字 我一直在尝试使用模板文字 但我想我就是不明白 现在我感到沮丧 我的意思是 我想我明白了 但 它 不应该是它的运作方式 或者它应该如何实现 它应该变得不同 我看到的所有示例 甚至标记模板 都要求 替换
  • NodeJS 错误堆栈未定义 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在使用节点检查器 我注意到new Error 有未定义的堆栈 如果我将此值分配给一个变量 该变量将显示堆栈未定义 有趣的是 跑步new
  • jQuery 更改为隐藏字段后触发重力表单中的表单更新

    简而言之 是否有 JavaScript 函数或挂钩来触发重力形式的更新 以便执行条件逻辑 原问题 我正在使用重力形式 并且创建了一个 变化时 事件 gform 1 find gfield date dropdown month select
  • ParseFromString 在 IE 中抛出错误,但在 Chrome 中不会抛出错误

    我正在使用传单的 KML 插件 该插件在 Google Chrome 中运行良好 然而 在 IE 中 它会在以下代码中引发错误 parser new DOMParser console log url outputs path to kml
  • 如何在画布中旋转图表同时保持数字垂直?

    我正在尝试围绕其中心旋转画布中的图表 同时保持字母直立 我正在尝试使用 ctx rotate 但它使用画布的左侧作为中心来旋转整个图表 以下链接提供了视觉效果 我希望它看起来像绿色 而不是红色 就像我的代码当前所做的那样 视觉解释 http

随机推荐

  • Xcode 8 无法导出 Ad Hoc 发行版的存档版本

    当我尝试在 Xcode 8 中导出存档应用程序以进行临时分发时 我收到一条错误消息 有没有匹配的配置文件 and 现有的配置文件缺乏应用程序标识符和钥匙串访问组权利 有什么问题吗 我怎样才能让它发挥作用 我尝试在开发人员会员中心生成临时分发
  • CoreData 和 mergeChangesFromContextDidSaveNotification

    我正在创建一个addingManagedObjectContext 作为新实体的便笺簿区域 然后在 保存 时将新实体合并到我的主 ManagedObjectContext 中 类似于 CoreDataBooks 示例中的显示方式 合并新实体
  • AWS Amplify Graphql 对 @connection 的查询

    我正在使用 AWS Amplify 前端使用 Cli 和 Angular 7 进行 Graphql AppSync 并且想知道当超过 10 个项目时如何获取所有连接的项目 假设我创建了一个这样的 schema graphql type Us
  • 为什么这个 Lua 优化 hack 会提高性能?

    我正在寻找一个描述提高 Lua 性能的各种技术的文档 http www lua org gems sample pdf脚本代码 我很震惊竟然需要这样的技巧 虽然我引用的是 Lua 但我在 Javascript 中也见过类似的 hack 为什
  • 仅重写 URL 的中间部分 - mod rewrite .htaccess

    我想改变cadeaushopurl 中的部分hobby cadeau shop 我在 htaccess 文件中进行了以下 mod 重写 RewriteRule cadeaushop http www zovyo nl hobby cadea
  • 如何在控制器中控制页面路由?

    OnsenUI 很棒 快速又简单 然而 关于控制器中控制温泉逻辑的文档并不多 例如 我想在控制器内执行 location path newpath 泡温泉是怎样做的 我尝试了 ons navigator pushPage partials
  • FFmpeg:如何估计音频流中的样本数量?

    我目前正在编写一个小型应用程序 它利用 FFmpeg 库来解码 C 中的音频文件 尤其是 avformat 和 swresample 现在我需要音频流中的样本总数 我知道确切的数字只能通过实际解码所有帧才能找到 我只需要一个估计 这里的首选
  • MouseListener 被多次调用

    我使用此代码来获取作为 jLable 图标放置的图像的 X 和 Y 坐标 对此的答案建议了这种获取坐标的方法question https stackoverflow com questions 19977589 how to get x y
  • HashMap 可串行化

    HashMap实现了Serialized接口 所以可以序列化 我查看了 HashMap 的实现 并且 Entry 表被标记为瞬态 由于Entry 表是存储Map全部内容的表 如果不能序列化 那么反序列化时Map是如何构造回来的 如果你看来源
  • Matplotlib 3D绘图zorder问题

    我有一个由蓝色表面组成的图 通过绘制plot surface 和一个红色球体 通过绘制scatter 曲面的 zorder 设置为 0 球体的 zorder 设置为 1 尽管不设置任何 zorder 值会产生相同的结果 You can se
  • 如何使用 Rails 和 Paperclip 将照片存储在 Google Cloud Storage 上?

    到目前为止 我一直使用 Amazon S3 来存储用户的文件 这里需要做的就是 指定存储桶的 Amazon S3 凭证 add aws sdk gem 到 Gemfile 并在模型中 has attached file avatar sty
  • 如何将 gdb 附加到 docker 容器中运行的进程?

    我在 docker 容器中有一个长时间运行的进程 我想将 gdb 附加到该进程以查看正在运行的线程并获取堆栈跟踪 我可以从主机附加到进程 但无法解析任何符号 因为可执行文件位于文件系统中的不同位置 位于 docker 安装的卷中 并且共享系
  • 将 void 指针转换为 float*/int* 时取消引用

    A int i 10 void p i printf f n float p B float i 10 00 void p i no change printf d n int p 为什么 A 打印 0 0 而不是 10 0 如果我们把A改
  • C hack 用于存储占用 1 位空间的位?

    我有一长串 0 到 67600 之间的数字 现在我想使用一个 67600 个元素长的数组来存储它们 如果某个数字在集合中 则该元素设置为 1 如果该数字不在集合中 则该元素设置为 0 IE 每次我只需要 1 位信息来存储数字的存在 C C
  • 有没有办法“提取”Expression Blend 的 WPF 控件?

    我不确定组成 Expression Blend 的 UI 的 WPF 控件是否以可用的方式打包在应用程序中 例如单独的程序集等 但是如果不是 是否有一种方法可以 提取 这些控件 以便您可以您的应用程序中具有相同外观和功能的相同控件吗 我相信
  • 如何以编程方式保存用户设置?

    我有一个按钮 可以打开窗口颜色托盘 然后将选择的颜色分配给某个虚拟工作室中的选定元素 用户首先通过鼠标单击选择元素 然后根据元素 ID 分配颜色 因此 每次单击按钮时 相同或不同元素的颜色都会发生变化 元素 ID 是从当鼠标单击某个元素时触
  • 时间线的最佳技术

    现在卡扎菲40多年的统治已经结束 我想将他的统治时期与其他国家的统治时期构建一个时间线图 例如美国总统 德国总理等 因此 x 轴是时间 y 轴是国家和时间线 按正确的时间范围划分 显示美国的尼克松 福特等 当我尝试学习 R 时 我更喜欢该语
  • 在Python中将多个参数传递给pool.map()函数[重复]

    这个问题在这里已经有答案了 我需要某种方法来使用 pool map 中接受多个参数的函数 根据我的理解 pool map 的目标函数只能有一个可迭代作为参数 但有没有一种方法可以传递其他参数 在这种情况下 我需要传递一些配置变量 例如我的
  • Xcode 4.6 自动授权不起作用 - “没有有效的 aps 环境”

    我遇到了著名的错误 无法获取令牌 错误 错误域 NSCocoaErrorDomain Code 3000 找不到应用程序的有效 aps environment 权利字符串 UserInfo 0x413be0 NSLocalizedDescr
  • 将 JsDoc3 用于大型应用程序,如何将模块分组为部分/类别/子模块

    我正在开发一个应用程序 随着时间的推移 它会变得相当庞大 我决定使用JsDoc3 and DocStrap记录所有模块 模块是通过 require js 定义的 在某些地方它们的嵌套深度可达 3 或 4 层 到目前为止 我了解到 JsDoc