4

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

使用 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。这违背了具有无模糊升级路径的框架的想法。此外,依赖项适用于框架提供的文件。它们不应该受到下游代码的干扰。

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

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

4

1 回答 1

2

您可以使用createRequire来实现这一点。

例如,如果您的应用程序具有依赖项,micromatch@4.0.2并且您希望在应用程序代码中要求其子依赖项而不声明它,则可以通过以下代码picomatch代表它:micromatch

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

这种方法将适用于所有包管理器和安装策略,包括Yarn v2 pnpand 。pnpmnpm

于 2020-10-07T11:22:06.947 回答