Делаем зависимости доступными с помощью 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 при изменении зависимостей. Это идет вразрез с идеей фреймворка с беспрепятственным путем обновления. Кроме того, зависимости относятся к файлам, предоставленным платформой. Последующий код не должен им мешать.
Можно ли делиться зависимостями ниже по течению?
Примечание: я использую рабочие области. Я не знаю, относится ли это к вопросу.
0 ответов
Вы можете использовать
createRequire
чтобы добиться этого.
Например, если ваше приложение зависит от
micromatch@4.0.2
и вы хотите, чтобы в коде приложения требовалась его подчиненная зависимость
picomatch
не заявляя об этом, вы можете сделать это от имени
micromatch
с помощью кода ниже:
const {createRequire} = require(`module`);
const requireDependency = createRequire(require.resolve(`micromatch`));
requireDependency(`picomatch`);
Этот подход будет работать со всеми менеджерами пакетов и стратегиями установки, включая
Yarn v2 pnp
и
pnpm
и
npm
тоже.