Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs JSDoc在使用webpack dev server的Lerna monorepo项目的本地包中不起作用,但在发布到包注册表时起作用_Reactjs_Webpack_Visual Studio Code_Jsdoc_Lerna - Fatal编程技术网

Reactjs JSDoc在使用webpack dev server的Lerna monorepo项目的本地包中不起作用,但在发布到包注册表时起作用

Reactjs JSDoc在使用webpack dev server的Lerna monorepo项目的本地包中不起作用,但在发布到包注册表时起作用,reactjs,webpack,visual-studio-code,jsdoc,lerna,Reactjs,Webpack,Visual Studio Code,Jsdoc,Lerna,Github项目回购: 我有一个monorepo项目,有两个包(Web和Api),它们使用lerna链接。Web项目导入Api包,并使用JSDoc记录Api请求 如果Api包是从NPM发布和导入的,那么文档将完全加载。 但是,如果通过lerna&webpack devserver在本地运行,文档将丢失,并且仅在本地代码中可用(在Api文件夹中)。 我曾尝试过使用模块、名称空间和搜索不同类型的解决方案来编写文档,但似乎都不起作用 JSDoc和函数: /** * Get comments f

Github项目回购:

我有一个monorepo项目,有两个包(Web和Api),它们使用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)
/**
*从jsonplaceholder API获取注释
*@namespace-API
*@模块
*@param{GetCommentsRequestExample}输入PostId
*@returns{Promise.}注释数组
*/
export const getComments=input=>apiGet('https://jsonplaceholder.typicode.com/comments,输入,GetCommentsRequest,GetCommentsResponse)
我不明白为什么JSDoc在包发布时工作,而在本地运行时不工作


额外测试2小时后编辑

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

如果我直接在这个索引文件中定义函数和JSDoc,那么JSDoc对其他包是可用的,即使在本地运行也是如此


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

我在VSCode和Lerna中遇到了这个问题。解决方案是将
jsconfig.json
添加到monorepo的根目录(或
lerna.json
所在的任何位置)

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

下面是示例配置的一些假设:

  • 您有一个包含所有软件包的
    packages/
    目录
  • 每个包都有一个包含代码的
    src/
    目录
  • 您的包具有命名空间
    @foo
    (例如,包被称为
    @foo/API
    或类似名称)
  • 将以下内容添加到
    jsconfig.json

    {
      "compilerOptions": {
        "baseUrl": ".",
        "paths": {
          "@foo/*": ["packages/*/src"]
        }
      }
    }
    
    重新启动VSCode/重新打开文件夹后,IntelliSense提示应正确显示。如果没有为包使用名称空间,则可以将多行添加到
    路径
    ,显式指向正确的
    src/
    目录或使用
    包含
    语法

    希望这有帮助

    编辑:

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

    {
      ...
      "paths": {
        "@foo/*": ["../*/src"]
      }
      ...
    }
    

    如果您在本地构建一个包并重新启动IDE,JSDoc IntelliSense提示是否开始正常工作?@plasmid87是的。太棒了,这类问题解决了。然而,这并不是完全的(也许这是不可能的?)。我从根jsconfig获得的intellisense没有从每个包本地获得的详细(每个包也有自己的jsconfig)。例如,我不能使用对象作为类型定义,而且它似乎丢失了intellisense的返回声明。当你解决了你的问题时,你是否碰巧也解决了这些问题?我尝试过删除每个包jsconfig,这只会将更详细的intellisense简化为全局使用的同一个包。不幸的是,我认为这只是不同的“peek”函数的工作方式。当我悬停(屏幕截图中为绿色)然后键入函数(屏幕截图中为红色)时,我会得到相同的行为。我刚刚看了一下VSCode文档,看起来这就是VSCode的工作方式:-看一下悬停信息与签名帮助,我认为它与我们看到的内容相同是的,悬停信息显示了更多细节,然而,我的意思是,当我从另一个包悬停函数时,intellisense和hover详细信息丢失,但是如果我在包内悬停,它是可用的。唯一可用的是JSDoc,而不是intellisenseAh,我明白你的意思。对不起,我以前没见过这个问题。它可能是一个改变行为的扩展,也可能是我的设置与iTunes有所不同。如果您想测试一下,请将我的repo的一个非常微型/基本的版本加载到github。