纱线 pnp 回退到默认要求

yarn pnp fallback to default require

我正在编写一些单元测试来检查 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

你有什么建议吗?

最好的解决方案是在 link: protocol

中安装依赖项
yarn add --dev transport@link:./test/fixtures/transport