TLDR -> Инструкции на пряжа.build
—
Инструмент в экосистеме JavaScript (и TypeScript), как правило, довольно хорош (нет на самом деле). Но долгое время на кусочке головоломки, с которой я сталкиваюсь, отсутствовал.
Большая часть того, что я создаю, в конечном итоге становятся приложениями с более чем одним развертываемым артефактом. Иногда они просто фронтальный клиент и простой сервер. В других случаях это плюс схема GraphQL, множественные лямбдас и так далее.
С тех пор, как Лерна появилась и идея, и инструменты для JavaScript Monorepos начали взлетать. Для меня только после того, как пряжа стала вещь между местными пакетами, так что, скажем, ваши интерфейские клиентские и серверные пакеты могут зависеть от вашего пакета схемы GraphQL. Yarn V2 подняла это на другой уровень и добавила определенную степень стабильности и правильности, что делает это еще более заманчивым.
Но среди всего этого строительство пакетов все еще было проблемой. А именно, если локальный пакет зависел от другого локального пакета, вам нужно как -то организовать это. И как бы я ни пытался, это всегда оказалось не идеальным — и, конечно, нелегко повторять.
В моем уходе на другие языки и инструменты я попытался использовать Bazel. В некотором смысле это здорово. Я использовал его с большим успехом с Golang Monorepo с несколькими артефактами сборки и тестирования.
Но для JavaScript, ну, это не красиво. Экосистема пакета JavaScript на данный момент разумно зрелая. Конечно, у него все еще есть недостатки, хотя работа постоянно выполняется для их решения. (Пряжа v2 поставщики вашего node_modules
как zip -файлы, например.)
JavaScript и Bazel Mix достаточно хорошо. Но JavaScript и NPM или пряжа не делают. Наличие двух систем, пытающихся владеть управлением зависимостями, просто болезненно.
Пряжа V2
В начале 2020 года я начал играть с пряжей V2. Plug’n’play и Zipfs
подход к Зависимости от продажи был мне заинтриговано немедленно. Оба являются областями, которые я обнаружил, что у нашего инструмента не хватает.
На практике в начале 2020 года поддержка росла, но все еще ограничена. Достаточное количество вещей сработало, чтобы убедить меня, что это работоспособный подход.
А потом я обнаружил, что пряжа V2 была гораздо более взломанной, чем V1. Мало того, с новым акцентом на правильность и воспроизводимость единственной, чего не хватает, чтобы сделать Bazel для JavaScript, был сам инструмент сборки.
Как это работает
На высоком уровне плагин довольно прост. Пряжа уже построила график зависимости. Нам просто нужно знать, с чего начать на этом графике. Это также относительно легко. Если вы находитесь в каталоге пакета, мы сможем понять, какой он пакет. Если нет, мы можем построить все.
Как только мы узнаем, что нам нужно построить, мы посмотрим на что -то, от чего это зависит, и если они зависят от чего -либо. И так далее. Как только мы узнаем об этом, мы сможем построить план того, как построить все это с такой же параллелизмом, как у вас.
Бонусная функция
Проработав все это, была одна последняя функция, которую я действительно хотел включить. И, честно говоря, это главное, что я хотел с самого начала.
Я хотел команду, которая создаст zip -файл, готовый для AWS Lambda, Kubernetes или Docker.
Теперь я слышу, что вы говорите: «А как насчет серверной структуры?». Хотя я знаю, что это ценный инструмент, и многие из нас используют его с большим успехом. Это никогда не соответствует моим требованиям. Любая абстракция над облачной информацией, которая скрывает фактические шаблоны облачной информации, всегда заканчивалась тем, что мешает мне.
Пряжа PNP делает это немного сложным. Локально связанные пакеты делают это очень сложно. И поставка node_modules
делает это почти невозможным.
Особенно в монорепо, где ваши зависимости разделяются и поднимаются. Это означает, что вы не можете просто скопировать соседние node_modules
папка.
Нам нужно что -то умнее.
Намного умнее.
Еще раз, у нас есть доступ к графику зависимости, который мы уже определили для пряжи. Объединение этого, с Zipfs
Инструмент в пряже V2, это было не слишком много дополнительной работы, чтобы сделать это.
Теперь в пакете работает Пакет пряжи
копирует все рабочее пространство (так вероятно, что вы хранили) во временную папку. Затем, используя график зависимости пряжи, мы выбиваем все, что нам не нужно. Удалить локальные пакеты, которые не используются, и поставленные пакеты, которые не используются.
На данный момент у нас есть zip -файл, который выглядит как ваш репо, с кучей вещей выброшена. Что здорово, но есть две оставшиеся проблемы, чтобы решить.
Первая, пряжа Pnp. Это здорово, и это означает, что наш zip -файл быстрее работы и меньше, чем node_modules
каталог. Но нам нужно запустить все через Pnp.js
файл.
Во -вторых, заключается в том, что, когда мы воссоздаем всю рабочую область в файле ZIP, а не только в вашем пакете, вам нужно точно знать, где он должен указать вашу точку входа или индекс.
Решение было довольно простым. Отбросьте файл с именем intrypoint.js
в корне файла zip. Сделайте это загрузить Pnp.js
сначала, затем загрузите свой файл, ссылается в Главный
в вашем package.json
.
И так же, Пакет пряжи
может создать zip -файл, готовый к запуску в Lambda et al.
С чего начать
Все это звучит великолепно, но как вы на самом деле это используете?
Во -первых, вы должны использовать пряжу V2. Если вы еще не здесь отличного Руководство по началу работы Анкет
Затем установите плагин, выполнив следующую команду в рабочей области пряжи:
Импорт плагина пряжи https://yarn.build/latest
Эта команда загружает и устанавливает (или обновления) пряжа.build плагин к последней версии.
Плагин загружается и продается в вашем хранилище. Это не повторно загружается на каждую сборку.
В настоящее время есть две команды, которые вы можете запустить.
Строительница пряжи
который будет управлять сборка
Скрипт определен в package.json
.
И Пакет пряжи
который создаст zip -файл, описанный выше, готов к Lambda et al.
В этом плагине еще предстоит проделать много работы, но в его текущем состоянии он готов начать использовать.
Вы можете найти источник здесь github.com/ojkelly/yarn.build .
И сайт находится в пряжа.build
Дайте мне знать, что вы думаете здесь или в Twitter @ojkelly
—
фото Дэнни -Слеувенхук на Неспособный
Оригинал: «https://dev.to/ojkelly/introducing-yarn-build-14fo»