Alcides Queiroz.
Уменьшите время установки до 70%. Спросите меня, как! ?
Любой, кто знает, может подтвердить, что я давний любовник JavaScript и все это Экосистема Отказ В качестве инженера-инженера, управляющие узел, управляющие пакетами на основе узлов, были важнейшей частью моего набора инструментов с 2013 года.
Во-первых, я использовал Bower, которая была в основном сосредоточена на переднем мире. Затем, в 2015 году я к сожалению (хорошо, не на самом деле ) понял, что Bower умирает и NPM, менеджер пакета по умолчанию для узла, был способ пойти на передний план. Сначала было странно для меня, сначала использовать NPM для других вещей, чем модули узлов, но я привык к идее и легко перенесшись.
Наконец, всего год спустя, Facebook дал нам пряжу, современную и пылающую быструю альтернативу NPM. Я любил это с первого взгляда! Но некоторые вещи все еще были проблематичными …
Унаследованные проблемы в пряже
Помимо скорости, пряжа принесла ряд преимуществ по сравнению с версией NPM в то время, такая как файлы блокировки, автономный режим, сетевой устойчивость, контрольные суммы и другие. Тем не менее, пряжа заимствовала некоторые известные проблемы от NPM:
Node_Modules здесь, там, везде
Для каждого проекта на вашей машине, который использует NPM или пряжу, A Node_Modules Папка создана. Неважно, если 10 проектов используют то же самое версию данного модуля, он будет скопирован снова и снова в каждый Node_Modules папка этих проектов.
Создание нового папки Node_Modules принимает очень долгое время
Даже взят большой скачок вперед с точки зрения скорости установки, пряжа была ограничена ограничениями Node_Modules. Просто создание папки Node_Modules занимает до 70% времени, необходимого для запуска Пряжа устанавливает (с теплым кешем). Это огромное количество файлов, которые будут созданы на каждой установке. Итак, не вините это на пряжу.
Зависимости не добавляются в Package.json
Вот сценарий для вас: ваше приложение отлично работает в разработке, но вылетает в производство. После нескольких часов расследования вы, наконец, понимаете, что вы забыли добавить зависимость от вашего Package.json. . Да, это может произойти.
Медленное разрешение модуля во время выполнения
Время загрузки вашего приложения сильно пострадало так, как узел разрешает зависимости. Он тратит время, запросив файловую систему, чтобы обнаружить, где будет разрешена заданная зависимость от.
Пряжа Plug’n’play с спасением!
Все вышеперечисленные проблемы были рассмотрены командой пряжи с выпуском функции Plug’n’play в сентябре прошлого года.
Когда вы включаете PNP, вместо того, чтобы копировать каждый необходимый файл из кэша в Node_Modules Папка, вот что делает пряжа:
- Это создает один файл со статическими таблицами разрешений. Эти таблицы будут содержать кучу важной информации, такой как: пакеты, доступные в дереве зависимости, как они относятся между собой и их местоположением на диске.
- Специальный Resolver используется для того, чтобы помочь узел, обнаруженным, где была установлена каждая зависимость (под папкой кэша пряжи). Это исключительно полагается на таблицы разрешений, которые были созданы ранее. Поскольку эти таблицы содержат информацию об всей дереве зависимости, процесс разрешения Node_Modules не должен будет много
статистикаиReadDirБольше звонит во время выполнения, значительно снижая время загрузки приложения. И как пряжа знает все ваши зависимости, оно будет жаловаться, если вы попытаетесь импортировать модуль, который нет в вашемpackage.json:
Используя плагин пряжи’n’Play
Преобразование проекта для использования PNP легко, как 1-2-3. Вам просто нужно добавить installconfig Раздел для вашего package.json , с PNP Ключ установлен на правда , как этот:
{ "installConfig": { "pnp": true }}После этого просто запустите Пряжа устанавливает И все внутри вашего Node_Modules Папка будет удалена. Отныне каждая зависимость будет решена непосредственно из горячего кеша пряжи.
Использование PNP в новом проекте RACT CREATE-RACT-APP
Если вы используете Create-React-App 2+, хорошая новость в том, что она отлично работает с Plug’tn’n’Play! Просто добавьте - PRP Опция для Create-raction-app Команда, и вы добруетесь, чтобы пойти:
npx create-react-app your-app-name --use-pnp
Возможные проблемы
Как ничто не идеально в мире, PNP может нести новые проблемы при использовании в проектах, опираясь на пользовательскую логику установки. Если вам нужна дополнительная информация об этих потенциальных новых проблемах, Вы можете найти подробное объяснение в этой статье Отказ
Заключение
Plug’n’play решает некоторые действительно раздражающие проблемы в пряже. Кроме того, это значительно улучшает кэширование зависимостей на СНГ, сохраняя время установки и позволяя нашим сборкам получить право на точку: Запуск тестов!
Вот и все! Веселитесь с пряжей PNP.
Оригинал: “https://www.freecodecamp.org/news/getting-rid-of-node-modules-with-yarn-plugn-play-a490e5e747d7/”