JSDoc 在使用 webpack 开发服务器的 Lerna monorepo 项目的本地包中不起作用,但在发布到包注册表时起作用

Fra*_*lle 6 jsdoc reactjs webpack visual-studio-code lerna

Github 项目仓库:https : //github.com/Fralleee/lerna-intellisense-jsdoc-vscode

我有一个包含两个包(Web 和 Api)的 monorepo 项目,它们使用 lerna 链接。Web 项目导入了 Api 包,并且使用 JSDoc 记录了 Api 请求。

如果 Api 包发布并从 NPM 导入,文档将被完美加载。 工作示例

但是,如果它通过 lerna 和 webpack devserver 在本地运行,则文档将丢失并且仅在本地代码中可用(在 Api 文件夹中)。 不工作

我曾尝试使用模块、命名空间和搜索不同类型的解决方案来编写文档,但似乎都不起作用。

JSDoc 和功能:

/**
 * Get comments from jsonplaceholder API
 * @namespace API
 * @module
 * @param {GetCommentsRequestExample} input PostId
 * @returns {Promise.<GetCommentsResponseExample>} Array of comments
 */
export const getComments = input => apiGet('https://jsonplaceholder.typicode.com/comments', input, GetCommentsRequest, GetCommentsResponse)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么 JSDoc 在包发布时有效,但在本地运行时无效。


经过 2 小时的额外测试后编辑

我使用 Api 包中的索引文件导出所有内容。此索引文件从包中导入所有内容,然后将其导出,有点像单一入口点。

如果我直接在此索引文件中定义函数和 JSDoc,则 JSDoc 可用于其他包,即使在本地运行时也是如此。

两种不同的方法

因此,导出-> 导入-> 再次导出似乎是一个问题,这会弄乱 JSDoc。这显然不是解决方案,因为 Api 包有太多代码无法放入单个文件。

pla*_*d87 6

我在使用 VSCode 和 Lerna 时遇到了同样的问题。解决方案是将 a 添加jsconfig.json到 monorepo 的根目录(或它所在的任何lerna.json位置)。

src/发生这种情况是因为 VSCode 需要被告知它应该在每个包的目录中查找提示。我认为它会默认查找main属性中指定的文件package.json(因此当构建包时,它可以在该文件中看到提示 - 显然对开发没有好处!)

以下示例配置的一些假设:

  1. 您有一个packages/包含所有包的目录
  2. 每个包都有一个src/包含代码的目录
  3. 你的包有一个命名空间@foo(例如,包被称为@foo/API或类似)

将以下内容添加到jsconfig.json

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@foo/*": ["packages/*/src"]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

重新启动 VSCode/重新打开文件夹后,IntelliSense 提示应该正确显示。如果您没有为包使用命名空间,您可以添加多行paths,明确指向正确的src/目录或使用文档中的include语法。

希望这可以帮助!

编辑:

每个包jsconfig.json也需要一个,以便它知道如何正确解析同级包,例如,

{
  ...
  "paths": {
    "@foo/*": ["../*/src"]
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)