Javascript 链接库和工作区应用程序之间的链接版本

Javascript 链接库和工作区应用程序之间的链接版本,javascript,reactjs,npm,npm-link,Javascript,Reactjs,Npm,Npm Link,我正在为我常用的组件开发一个React库。在我的根文件夹中,有: 我的汇总配置和包含我的库的src/文件夹。构建时,捆绑文件(ES、CJS和UMD)位于dist/文件夹中 我的工作区:一个简单的包捆绑应用程序,其中有一个独立的包.json。在这个package.json中,myLib位于依赖项中,我链接了它 当我想在工作区中使用myLib时,我会这样导入它:import{Button}来自“myLib” 在这里,一切似乎都很好。但是在一个组件中,我使用了一个钩子,我有一个错误: Uncaug

我正在为我常用的组件开发一个React库。在我的根文件夹中,有:

  • 我的汇总配置和包含我的库的
    src/
    文件夹。构建时,捆绑文件(ES、CJS和UMD)位于
    dist/
    文件夹中
  • 我的工作区:一个简单的
    捆绑应用程序,其中有一个独立的
    包.json
    。在这个
    package.json
    中,myLib位于依赖项中,我链接了它
当我想在工作区中使用myLib时,我会这样导入它:
import{Button}来自“myLib”

在这里,一切似乎都很好。但是在一个组件中,我使用了一个钩子,我有一个错误:

Uncaught Invariant Violation: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
似乎有两个React副本,
npm ls React
返回:

└─┬ myLib@1.0.0 invalid
  └── react@16.8.6  extraneous
我试图在
myLib/
workspace/
node\u模块之间链接react和react-dom,但它一直不起作用,这个错误仍然存在


TLDR

这是我的文件树:

myLib
│   package.json
│   rollup.config.js
│
└───dist/
│
└───src/
│   │   **
│
└───workspace
│   │   package.json
│   │   index.js
要将myLib链接到工作区:我进入
myLib/
并执行
warn link
,然后进入
workspace/
并执行
warn link myLib

react和react dom是
myLib中的对等依赖项
workspace/


哦,当然我已经看过了:


    • 我在这里找到了一个适合我的答案:


      我花了一点时间研究这个问题,但答案很简单。如果您有多个版本的React,则必须转到您的工作区并链接到myLib中的React版本。

      此问题的解决方案实际上在以下部分中进行了说明:

      当您使用npm链接或等效链接时,也会出现此问题。在这种情况下,您的绑定器可能会“看到”两个响应—一个在应用程序文件夹中,另一个在库文件夹中。假设myapp和mylib是同级文件夹,一个可能的修复方法是从mylib运行
      npm link../myapp/node_modules/react
      。这将使库使用应用程序的副本


      另一个解决方案是使用(with)。

      这应该是React文档的正确链接:谢谢@Cog,刚刚修复了它