2

我正在编写一些单元测试来检查是否my-module正确加载了用户区模块external-module

const myMod = require('my-module')

myMod( { load: 'external-module' } )

现在我遇到了错误:

Your application tried to access transport, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.  Required package: transport Required by: /Users/mspigolon/workspace/pino/test/  Require stack: - /Users/mspigolon/workspace/pino/test/transport.test.js

这是响亮而清晰的,因为测试会在运行时创建node_modules文件夹中的依赖项,并且yarn在安装阶段不会对其进行处理。

  await symlink(
    join(__dirname, 'fixtures', 'transport'),
    join(__dirname, '..', 'node_modules', 'transport')
  )

我找不到一种方法yarn@3.0.1来回退到文件系统。

我阅读了有关PnPApi的信息,但我没有弄清楚如何使用它们来加载在运行时创建的这个依赖项。你可以帮帮我吗?这是正确的选择还是您看到了更好的方法?

我也尝试过pnpIgnorePatterns选项,但它忽略了整个文件,而不仅仅是一个文件require

在我看来,另一种解决方案是发布test-transport-module并安装它,但我会避免它。

yarnrc的很简单:

yarnPath: ".yarn/releases/yarn-berry.cjs"
nodeLinker: pnp
pnpMode: loose

你有什么建议吗?

4

1 回答 1

0

最好的解决方案是在link:协议中安装依赖项

yarn add --dev transport@link:./test/fixtures/transport
于 2021-09-02T07:35:46.280 回答