在node.js上运行单元测试时,“以响应作为对等依赖项”在公共包中出现“找不到模块”

时间:2019-09-04 10:21:56

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

我具有以下应用程序结构:

  • Application A
  • Application B
  • Common package

现在Application ABpackage.json中添加了通用软件包:

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

这两个应用程序都使用React以及通用软件包,都在React中添加了npm,并且在我们开始使用react钩子之前就可以正常工作了。

因为我们从一开始就获得了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'

这来自我们使用的office-ui-fabric-react程序包,但它似乎是一个更普遍的依赖关系解决问题。

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

我找到了一些答案,建议在公共软件包中对npm link进行反应,对应用程序node_modules中的react软件包进行反应,但这似乎是错误的,因为公共软件包被两个应用程序使用,因此只能解决一个问题。

1 个答案:

答案 0 :(得分:1)

在上述情况下,我们终于找到了一个解决方案

  • 重新添加对Common package的devDependency反应
  • 使用esm软件包来帮助我们的测试运行了解fabric软件包随附的es6模块导出/导入。只需使用mocha --require esm ...
  • webpack.config.js的{​​{1}}中弹出别名并添加别名

    Application

应用程序A,B和挂钩现在可以正常工作。