node.js - "Cannot find module"在 node.js 上运行单元测试时 react 为公共(public)包中的对等依赖

标签 node.js typescript npm webpack office-ui-fabric

我有以下应用程序结构:

  • 应用程序 A
  • 应用程序 B
  • 普通包

现在 Application ABpackage.json 中添加了公共(public)包:

{
  dependencies: {
      "commonPackage": "file:../../../commonPackage"
  }
}

这两个应用程序都使用 React,以及通用包,所有应用程序都使用 npm 添加了 React,并且在我们开始使用 React Hooks 之前它就起作用了。

因为当我们开始时,我们得到了一个 Invalid Hook Call Warning由于拥有“多个 React 副本”,因此为了避免这种情况,在通用包中,react 依赖项被移动到 peerDependencies 以便使用来自应用程序的 react 实例,而不是来自包。

当我们同时运行应用程序 AB 时,它在浏览器中运行良好,但是当我在控制台中运行 mocha 测试时,我得到:

ERROR in ../commonPackage/~/@uifabric/utilities/lib/customizations/Customizer.js
   Module not found: Error: Can't resolve 'react' in 'D:\myProject\commonPackage\node_modules\@uifabric\utilities\lib\customizations'

这来 self 们使用的 office-ui-fabric-react 包,但它似乎是一个更普遍的依赖解析问题。

项目使用 TypeScript,我们使用 webpack 为浏览器编译应用程序,并使用 tsc 为单元测试编译。

我找到了一些答案,建议将npm link react in the common package to react package in the application node_modules,但似乎不对,因为common package是由两个应用程序使用,它只能解决一个问题。

最佳答案

在上面的案例中,我们最终得出了一个解决方案

  • 将 react 作为 devDependency 添加回 Common package
  • 使用 esm 包帮助我们的测试运行理解 fabric 包附带的 es6 模块导出/导入。只需使用 mocha --require esm ...
  • Application 中向 webpack.config.js 弹出并添加别名

        alias: {
            'react': path.resolve('./node_modules/react')
        }
    

应用程序 A、B 和 Hook 现在可以工作了。

关于node.js - "Cannot find module"在 node.js 上运行单元测试时 react 为公共(public)包中的对等依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57786415/

相关文章:

node.js - 使用Ingress服务类型将 “express-gateway”部署到Google Kubernetes Engine时出现问题

npm - Solidity - 输入 JSON 描述的 Solidity 代码

node.js - 由于需要更新通知程序包,nodemon 未运行

node.js - 服务器端渲染中的 ComponentDidMount()

node.js - 类型错误 : Cannot use 'in' operator to search for 'pluralization' in undefined

javascript - Push() 无法显示字符串

angular - 暂停和恢复可观察流,请提出更好的选择

javascript - 打印方法参数名称,其中最后一个参数是 ES5 中的展开参数

javascript - 如何离线运行像 create-react-app 这样的 npm 命令

mysql - 如何从MySQL服务器检索nodejs列表中所有项目的数据?