使依赖项的依赖项在 Yarn 2 中可用

Making a dependency's dependencies available with Yarn 2

我正在开发一个框架,我希望框架包的依赖项可供使用它的应用程序使用。依赖不是消费者直接使用的,而是框架提供的文件。

使用 npm,它可以工作,但是使用 Yarn 2 我会遇到这样的错误

Error: Your application tried to access @snowpack/plugin-dotenv, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.

显然,我可以将依赖项添加到消费应用程序的 package.json,但这需要在依赖项发生变化时手动编辑 package.json。这与具有无模糊升级路径的框架的想法背道而驰。此外,依赖项适用于框架提供的文件。它们不应受到下游代码的干扰。

是否可以在下游共享依赖项?

注意:我正在使用工作区。我不知道这是否与问题相关。

您可以使用 createRequire 来实现。

例如,如果您的应用程序依赖于 micromatch@4.0.2,并且您希望在应用程序代码中要求它的 sub-dependency picomatch 而不声明它,您可以代表micromatch 通过以下代码:

const {createRequire} = require(`module`);
const requireDependency = createRequire(require.resolve(`micromatch`));
requireDependency(`picomatch`);

此方法适用于所有包管理器和安装策略,包括 Yarn v2 pnppnpm 以及 npm