Рубрики
Без рубрики

Представляющий пакет: Супер быстрый экспериментальный биндер, написанный в ржавчине

Bukhari Muhammad, вводящий пакет: супер быстрый экспериментальный биндер, написанный в Rustpackem, является экспериментальным, предвзятым изложенным модулем JavaScript Bundler, в основном реализованный в Rust. Он также может обрабатывать различные другие типы файлов, такие как YAML / TOML, файлы фрагментов и намного больше. Оформить заказ на сайте или GitHub

Бухари Мухаммед

Packe – это экспериментальный прекомпасный модуль JavaScript Bundler, в основном реализованный в ржавчине. Он также может обрабатывать различные другие типы файлов, такие как YAML/TOML, файлы фрагментов и намного больше. Оформить заказ Сайт или Страница GitHub быстро начать.

Packe Packe разрешает зависимости модуля и регидратыты их в график модуля, плоский список, содержащий модульные интерфейсы, которые по существу Ссылки на воскребные данные на основе воскрешенных данных в памяти содержащие специальные метаданные модуля в модульном графике.

Большая часть бизнес-логики абстрагируется в ржавчине, используя привязки FFI, чтобы включить низкоуровневые взаимодействия между обоими концами. Ржавые двоичные файлы доступны как предложенные узлы C/C ++ Addons в Repo Packe …| Отказ Облачная CI используется для запуска нескольких сценариев с установками предварительного GYP, получая определенные OS-образные двоичные файлы с поддержкой более поздних версий узла (8, 9, 10).

Этот слой ядра пакета – это то, что называется Логический контекст (LC) . Все остальные операции, которые не являются явно расстановленные приоритеты регрессируются в общее время выполнения узла, что в Условиях Packe – это Контекст времени выполнения (RC) Отказ Подробнее о контекстах здесь Отказ

Теоретически, график модуля поддерживается, чтобы избежать распространенных подводных камней, которые привели бы к ненужным обходам, если дерево использовалось на месте. Это позволяет RC отслеживать такие случаи, как глубокие круглые зависимости или сильно вложенные динамические импорта (кодовые расщепления), среди прочего, соответствующим образом с минимальными последствиями производительности или побочными эффектами.

Я имел в виду эту идею, но никогда не планировал выполнить ее, пока я объединенные силы с Саддам М Отказ Это действительно в моих интересах увидеть пакет модуля как концепцию, безопасную для кого-либо, чтобы учиться, понять и реализовать. Наличие людей борьбы с конфигурациями, документация и плагины были чрезвычайно ужасной, и я хотел бы принять шанс изменить это. С тобой. С пакетом.

Быстрая история

Я потребовался некоторое время, чтобы вычерчить большинство боковов, написанных в среде без JavaScript. Я узнал, что большинство из них забыл То, что они должны быть Bundler, а не библиотекой C/C ++ из Dark ‘OL 19S.

То, что я хотел, был Bundler, который делает большую часть тяжелой подъема в близко к металлу Язык для пользователя, не требующий никакого взаимодействия с его внутренними. Тогда я нашел ржавчину. Умный и краткий язык систем, который показывает некоторые похвальные функции, такие как бесстрашная модель параллелизма, безопасность типа и многое другое! Я ожидаю, что так же ожидаю от использования C/C ++ Но я бы предпочел придерживаться ржавчины, так как это довольно просто, когда дело доходит до управления памятью.

Почему еще один биндер?

Так что же взять сюда? Почему нам нужен еще один инструмент сборки, поскольку у нас уже есть удивительные, такие как WebPack, Parcel, Rollup и т. Д.? Я возьму тебя вместе с несколькими причинами, почему. Возможно, вы могли бы иметь свои собственные интересы в том, чтобы ваша разработка и разрабатываемые времена производства значительно уменьшались.

Это 2019, нам больше не нужны медленные инструменты

Хотя Packe будет быстрее, чем WebPack 4, Это более чем в два раза быстрее, чем посылка (с многократной компиляцией) Отказ В тесте ориентира мы в комплекте Лоташ V4.17.1 Как с упаковком, так и посылкой, и это был результат:

Причина, по которой я не беспокоил посылку Benchmarking против WebPack, был потому, что WebPack 4 глубоко быстрее, чем посылка. Я доказал этот факт, используя Шон Т. Ларкин Собственные скамейки и нить в Twitter можно найти здесь Отказ

Потому что мы можем. Любой может, верно?

Конечно, что сделает самый смысл, потому что Мы можем Отказ У нас была идея иметь более быстрые времена связки с ржавым интерфейсом либо с FFI или WASM (все еще не уверены навсегда). FFI был более разумным, насколько это было более разумно, так как было обеспокоено скоростью, а DX, поэтому мы пошли с пакетом, реализованным в привязках ржавчины FFI.

Мы испытали несколько проблем, связанных с нитями, поэтому мы не очень много использовали имеющиеся ресурсы. В результате мы использовали несколько детских процессов узла (с узел-работник-фермы ) Та же самая техника Parcel использует для многократной компиляции, но для более крупных графиков модулей, поскольку он добавляет значительное время запуска в верхней части безотказной работы узла при использовании с меньшими модульными графами.

Стиль конфигурации

Это была сложная часть. Было много вопросов, которые нуждались в хорошем ответе, чтобы составить правильный стиль конфигурации. Статический или динамический? JSON/YAML/TOML? Наш выбор был полностью основан на том, мы необходимо Пакет к:

  1. Иметь стиль конфигурации Neater, а также
  2. Быть агностиком других пользовательских конфигураций пользователей, таких как .babelrc или Package.json. .

Грузоперевозки, мы продолжили статический стиль конфигурации, поскольку мы обнаружили, что это именно то, что нам нужно. То, что мог бы Деклариво скажи пакет, как управлять циклом расслоения Отказ Все ограничения наличия статической конфигурации были сделаны ясными.

Другим аспектом интереса был тип файла, который мы должны использовать для конфигурации. JSON, которая более распространена для подавляющего большинства разработчиков JavaScript или YAML/TOML/XML-стиля, которые являются менее распространенными, но имеют свои преимущества (ы). Предложение все еще было сделано для поддержки JSON ( # 5 ).

JSON просто не вырезал из-за всех ненужных строковых котировок, фигурных и блоков, которые имеют смысл, поскольку это Формат взаимодействия данных Отказ Подход XML-ISH заслуживает не уважения с уважением к использованию в качестве формата конфигурации, поскольку он делает все хуже, чем JSON до тех пор, пока не нужны ненужные символы. TOML представил множество новых строк, и отладки вложенные параметры, похоже, не были привлекательными, поскольку мы знали, что плагины Packe могут быть действительно устаревшими.

Финальный победитель был yaml! Он смог пройти через все аспекты быть правильным форматом конфигурации (по крайней мере, для Packem). Это:

  1. Делает конфигурацию безболезненной.
  2. Использует элегантный подход.
  3. Все еще знаком к глазу JavaScript
  4. Был разработан специально для этого использования (конфигурации) Отказ

Вот пример типичного конфигурации пакета ( PackeM.config.yml) Отказ Проверьте сами и подумайте о том же контент в стиле JSON/TOML/XML-ISH.

FYI, только первые два варианта необходимы! ?

Расширение пакета

Иногда нам может потребоваться использовать функцию, которую еще не существует , может быть не реализован в PackeM или это Очень специфично для нашего проекта Отказ Для этого у вас есть два способа решения ваших потребностей:

  1. Создайте плагин Packem Для вашего случая использования (который является рекомендуемым вариантом).
  2. Создайте пользовательский RC на вершине двоичных файлов Packe.

Использование ржавчины дает нам возможность реформировать LC в другие двоичные форматы, такие как WOOTASSEMBLE, что позволит Packem для демонстрации множества компилейных целей:

  1. Аддон на основе NAPI C/C ++ с платформенными двоичными дворами, требуемыми по умолчанию Packe RC.
  2. Бинарный двоич на базе, который является кроссплатформой и вводится в RC.
  3. Автономный параметр PackeM по умолчанию, который использует Webassembly с совместимым браузером реализацией RC.

Расширенное руководство вскоре ожидается покажет вам, как Создайте пользовательский сбор сборки с использованием двоичных файлов Packe Чтобы соответствовать собственным потребностям в случае необходимости использовать Packe вне среды браузера и узлов. Эти двоичные файлы завершают все генерацию графа и дублируют фильтрацию и другие аспекты, связанные с графиком. Это означает, что вы можете использовать ваш пользовательский сериализатор, файловый наблюдатель, систему плагинов и т. Д. Это очень похоже на то, как вы можете построить свой пользовательский рендер над OpenGL.

  1. Вы все еще можете обнять Система плагина PackeM Поскольку он позволит вам интегрировать экосистему плагинов Packe BackeM с вашим пользователем Bundler.
  2. Если вы не уверены, нужно ли вам построить пользовательский биндер, знаете, что вам не всегда нужно. Пожалуйста, попробуйте сначала подать проблему.
  3. Это гарантию, что эти двоичные файлы ускоряют ваш рабочий процесс в зависимости от вашего конкретного применения корпуса (ов).

Текущее состояние

  • Код разделить Для развития и режимов развития.
  • ? Улучшена CLI (`- Verbose`) для получения лучшей информации о цикле объединения.
  • ? М Одельные интерфейсы Чтобы облегчить манипулирование графом модуля.
  • ✔ правильный приоритет. Нативные функциональные возможности идеально подходят в LC. Это означает, что существует большие шансы на скорейшие сборки.
  • ? Экспорт N AtiveTils Для внешнего использования собственных функций, включая G EneratemoduleGraph который перезапускает процесс генерации графа модуля. Это тяжело, но все же полезно в тех случаях, когда вам понадобится клон текущего диаграмма активного модуля. Используя это означает удвоение времени сборки, поэтому используйте его с осторожностью.

Что дальше?

Это особенности, которые мы надеемся в ближайшее время в предстоящих выпусках. С вашими усилиями мы могли Получить патук сделано правильно Отказ Когда Packe на 1.0 , мы ожидаем, что будут полной поддержки для всех функций, перечисленных ниже, а другие упомянутые в Дорожная карта PackeM Отказ

  • Совместимый браузер автономный пакет с LC в Webassembly для более тесной интеграции с базовой системой. Axel Rauschmayer Уже сделал запрос на функцию иметь содеющую версию в WASM. Для записи мы будем работать как в ближайшее время.
  • Встряхивание дерева, но продвинуто. Разрешение именованного/неназванного импорта и зачистки мертвого кода должно быть ветером. Это означает, что вы можете использовать библиотеки, такие как лоташ вместо Лодаш-эс Не беспокоясь, будет ли ваш код Уровень или не.
  • Авто конфигурация. Как ноль конфигурации, но по умолчанию ориентировано на дополнительную гибкость.
  • Расширенные варианты CLI для разработки с Packem вторым природой.
  • Лучшая ошибка отчетности.
  • Больше целей окружающей среды. Packe может только пучок для браузера на данный момент. В конце концов, мы ожидаем поддержки узлов CJS и других форматов.
  • Больше плагинов. Нам нужно больше плагинов! У Packe есть набор общих плагинов, чтобы вы начали быстрее. Но вырастить сообщество, нам понадобится отличная экосистема плагинов. Проверьте Общие плагины Доступно или Раздел плагинов На сайте, чтобы начать разрабатывать плагин сразу.
  • И многое другое…

Ресурсы

Packe не добрался до 1.0 И все же Отказ Если вы нашли Packe, чтобы быть интересным для вас, попробуйте вносить вклад в упаковку, создавая плагины, обновляя документацию, поддерживая нас финансовую поддержку, представляющую пакет на конференциях или любые другие средства. Мы ценим ваши усилия!

Счастливый пакет! ???

Оригинал: “https://www.freecodecamp.org/news/introducing-packem-a-super-fast-experimental-bundler-written-in-rust-e981af875517/”