在 node.js 上运行单元测试时“找不到模块”,并将 React 作为公共包中的对等依赖项

2024-06-22

我有以下应用程序结构:

  • Application A
  • Application B
  • Common package

Now Application A and B有在package.json通用包添加:

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

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

因为当我们开始时,我们得到了一个无效挂钩调用警告 https://reactjs.org/warnings/invalid-hook-call-warning.html由于有“多个 React 副本”,因此为了避免这种情况,在公共包中,react 依赖项被移至peerDependencies以便使用应用程序中的 React 实例而不是包中的实例。

当我们运行这两个应用程序时,它在浏览器中运行得很好A and B,但是当我运行我的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公共包中的react到应用程序中的react包node_modules,但这似乎是错误的,因为公共包被两个应用程序使用,它只能解决一个问题。


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

  • 添加回 React 作为 devDependency 到Common package
  • using esm包来帮助我们的测试运行了解附带的 es6 模块导出/导入fabric包裹。只是使用mocha --require esm ...
  • 弹出并添加别名webpack.config.js in Application

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

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

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

在 node.js 上运行单元测试时“找不到模块”,并将 React 作为公共包中的对等依赖项 的相关文章

随机推荐