Что такое зависимость от сверстников и в чем проблема?
Зависимости от сверстников Особые зависимости действительно полезны для модулей многоразового использования:
- Попросите пользователя установить зависимость, который должен работать вашему модулю без указания версии, в частности,
- Предотвращает наличие нескольких версий одного и того же модуля в приложении пользователя node_modules
- Уменьшите размер файлов JavaScript для загрузки на стороне браузера, особенно полезно для мобильных пользователей
Проблема с зависимостями со сверстниками – npm и пряжа Не устанавливайте их вообще. Это правильное поведение для производственных целей, но когда вы развиваете, вам может потребоваться протестировать свой модуль в хост -приложении. npm и пряжа Предоставьте команду для достижения его под названием Ссылка Это в основном создает символику в приложение хоста node_modules в папку источника модуля. Это работает нормально Но вам также необходимо выполнять задачи в своем модуле, которые нуждаются в этих зависимостях. Например, вы можете захотеть выполнить тесты. Поскольку они не присутствуют в вашем модуле node_modules вы будете испытывать такие ошибки:
Cannot find module 'react' from 'index.js'
пряжа и npm Не предоставляйте инструменты для установления зависимостей со сверстниками для вашей среды разработки. Есть открытая проблема на пряжа Репозиторий, так как 27 октября 2016 г. но пряжа Имеет специальный сценарий под названием Подготовьте Это выполняется после установки зависимостей только в режиме разработки, может быть, мы могли бы что -то сделать с ней 🤔. Давайте найдем способ установить работу!
Решать проблему
Я сделал Репозиторий со всеми источниками, чтобы воспроизвести проблему.
У нас есть следующая структура папок:
.
├── LICENSE
├── README.md
├── app
│ ├── node_modules
│ ├── package.json
└── lib
├── node_modules
└── package.json
Прежде всего, мы настроем ссылку, поэтому приложение node_modules укажите на папку LIB.
Вы должны установить зависимости, и вам также может потребоваться сначала построить свой модуль
cd lib yarn link cd ../app yarn link lib
На этом этапе, если вы запустите свое приложение, вы можете использовать свой модуль без каких -либо проблем. Проблема появляется, когда вы пытаетесь выполнить вещи в папке модуля, как я уже говорил, как тесты. Чтобы решить это, мы будем использовать Подготовьте Скрипт от пряжа и пакет УСТАНОВКА-ПЕРС-КЛИ Анкет
УСТАНОВКА-ПЕРС-КЛИ это CLI, который устанавливает партнерские зависимости пакета. Это должно быть вызвано после установки зависимостей. К счастью Подготовьте называется после установки зависимостей, и только при разработке вы разрабатываете, чтобы он не установил зависимости со сверстниками, когда пользователь устанавливает ваш модуль.
Первая установка УСТАНОВКА-ПЕРС-КЛИ упаковка:
yarn add -D install-peers-cli
Затем добавьте Подготовьте Скрипт в вашем модуле Package.json и позвоните УСТАНОВКА-ПЕРС-КЛИ в этом:
// package.json
{
"scripts": {
"prepare": "install-peers"
}
}
Теперь вы можете начать все, что использует ваши зависимости от сверстников, не испытывая ошибок. Если ваш модуль не использует Реагировать и его новое дополнение Крючки …
Для реагирования с помощью крючков
Если вы выполняете предыдущие шаги, у вас должна быть ошибка со следующим сообщением «крючки можно назвать только внутри корпуса функционального компонента». Эта ошибка возникает, когда у вас есть несколько копий Реагировать в папке Node_Modules. В этом Комментарий Дэн Абрамов объясняет решение этой хорошо известной проблемы. Давайте подумаем на практике.
Вы должны пойти в реагировать Папка, которая присутствует в вашем модуле node_modules и создать ссылку. Затем вернитесь в папку приложения для хоста и используйте эту ссылку.
cd lib/node_module/react yarn link cd ../../../app yarn link react
Теперь ошибка должна быть исправлена, и вы можете использовать свой модуль в приложении вашего хоста!
Вы все готовы 🙌!
Видите опечатку? Не стесняйтесь открыть проблему или сделайте запрос на привлечение на Репозиторий статьи
Оригинал: “https://dev.to/yvonnickfrin/how-to-handle-peer-dependencies-when-developing-modules-18fa”