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

2024-01-08

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

我有一个包含两个包(Web 和 API)的 monorepo 项目。这些是使用 Lerna 连接的。 Web项目导入API包,并使用JSDoc记录API请求。

The documentation gets loaded perfectly if the API package is released and imported from NPM. working example

However, if it is run locally via Lerna & Webpack dev server, the documentation is lost and only available in the local code (in the API folder). not working

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

JSDoc 和函数:

/**
 * Get comments from JSON placeholder 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)

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


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

我使用 API 包中的索引文件导出所有内容。该索引文件从包中导入所有内容,然后将其像单个入口点一样传送。

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

所以这似乎是导出 -> 导入 -> 再次导出的问题,弄乱了 JSDoc。这不是一个解决方案,因为 Api 包的代码太多,无法放入单个文件中。


我在使用 VSCode 和 Lerna 时遇到了同样的问题。解决方案是添加一个jsconfig.json到 monorepo 的根目录(或者任何地方)lerna.json位于)。

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

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

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

将以下内容添加到jsconfig.json:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@foo/*": ["packages/*/src"]
    }
  }
}

重新启动 VSCode/重新打开文件夹后,IntelliSense 提示应该正确显示。如果您没有为包使用命名空间,您可以添加多行paths相反,明确指向正确的src/目录或使用include syntax 从文档中 https://code.visualstudio.com/docs/languages/jsconfig.

希望这可以帮助!

EDIT:

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

{
  ...
  "paths": {
    "@foo/*": ["../*/src"]
  }
  ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSDoc 无法在使用 webpack 开发服务器的 Lerna monorepo 项目中的本地包中工作,但在发布到包注册表时可以工作 的相关文章

随机推荐