"Cannot find module" 当 运行 对 node.js 进行单元测试时,在公共包中作为对等依赖项做出反应
"Cannot find module" when running unit tests on node.js with react as peer dependency in common package
我有以下应用程序结构:
Application A
Application B
Common package
现在 Application A
和 B
在 package.json
中添加了通用包:
{
dependencies: {
"commonPackage": "file:../../../commonPackage"
}
}
这两个应用程序都使用 React,以及通用包,都添加了 React npm
,并且在我们开始使用 React Hooks 之前它就起作用了。
因为当我们开始时,由于有 "more than one copy of React",我们得到了 Invalid Hook Call Warning,所以为了避免这种情况,在通用包中,react 依赖项被移动到 peerDependencies
以便使用来自应用程序的反应实例,而不是来自包的反应实例。
当我们 运行 这两个应用程序 A
和 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 in the common package to the react package in the application node_modules
,但似乎不对,因为common包被两个应用程序使用,它只会解决一个问题。
在上面的案例中,我们最终得出了一个解决方案
- 将 react 作为 devDependency 添加回
Common package
- 使用
esm
包帮助我们的测试运行理解 fabric
包附带的 es6 模块 export/import。只需使用 mocha --require esm ...
在 Application
中为 webpack.config.js
弹出并添加别名
alias: {
'react': path.resolve('./node_modules/react')
}
应用程序 A、B 和挂钩现在可用。
我有以下应用程序结构:
Application A
Application B
Common package
现在 Application A
和 B
在 package.json
中添加了通用包:
{
dependencies: {
"commonPackage": "file:../../../commonPackage"
}
}
这两个应用程序都使用 React,以及通用包,都添加了 React npm
,并且在我们开始使用 React Hooks 之前它就起作用了。
因为当我们开始时,由于有 "more than one copy of React",我们得到了 Invalid Hook Call Warning,所以为了避免这种情况,在通用包中,react 依赖项被移动到 peerDependencies
以便使用来自应用程序的反应实例,而不是来自包的反应实例。
当我们 运行 这两个应用程序 A
和 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 in the common package to the react package in the application node_modules
,但似乎不对,因为common包被两个应用程序使用,它只会解决一个问题。
在上面的案例中,我们最终得出了一个解决方案
- 将 react 作为 devDependency 添加回
Common package
- 使用
esm
包帮助我们的测试运行理解fabric
包附带的 es6 模块 export/import。只需使用mocha --require esm ...
在
中为Application
webpack.config.js
弹出并添加别名alias: { 'react': path.resolve('./node_modules/react') }
应用程序 A、B 和挂钩现在可用。