Включите исполнение JavaScript в браузере, чтобы запустить приложение.
24 окт 2024

Среда для разработки Bun.js

Bun.js — современная среда разработки, которая обещает ускорить ваши рабочие процессы. Что такое Bun? Узнайте о преимуществах Bun.js, функционале и возможностях.

JavaScript — один из популярных языков программирования . Он используется для разработки сайтов, мобильных приложений и игр. У JavaScript есть проблемы с производительностью, совместимостью и безопасностью. Но с этим сталкиваются и другие языки.

Для решения этих проблем за прошедшие годы было создано несколько сред разработки JavaScript. Node.js и Deno — самые известные среди них. Хоть они во многом и помогли решить проблему, но не смогли закрыть все пробелы.

Bun — еще одна среда выполнения JavaScript, которую реализовали в 2021 году. Но стабильная версия продукта вышла только в сентябре 2023 года. Bun.js — эффективная альтернатива Node.js. В статье рассмотрим эту среду разработки, ее особенности и области применения.

  1. Что такое Bun.js?
  2. Цель разработки Bun.js
  3. Преимущества Bun.js
  4. Ключевая особенность Bun.js
  5. Область применения Bun.js
  6. Примеры использования Bun.js
  7. Bun.js против Node.js

Что такое Bun.js?

Bun — это среда выполнения JavaScript, в основном написанная на языке программирования Zig. В Bun.js устранены ограничения Node.js. При этом среда делает процесс разработки более эффективным.

Bun называют универсальным инструментом для улучшения работы с JavaScript и TypeScript. Инструмент помогает быстрее запускать проекты и оптимизирует использование памяти.

В отличие от Node.js, эта среда разработки не использует только npm. Ей не нужны внешние зависимости. Она имеет встроенную стандартную библиотеку, предлагающую функциональные возможности для различных протоколов и модулей, включая переменные среды, HTTP, WebSocket и файловую систему.

Цель разработки Bun.js

Bun — это больше, чем просто среда разработки. Это полноценный инструмент, включающий package manager, test runner и script runner. Менеджер пакетов, средство запуска тестов и выполнения необходимы для более эффективной разработки. Основные цели разработки:

  • повышение скорости — процессы запускаются в 4 раза быстрее, чем в Node.js;
  • поддержка TypeScript и JSX — можно напрямую выполнять fail .jsx, .ts и .tsx;
  • стандартные API — инструмент реализует стандартные веб-API, такие как fetch, WebSocket и ReadableStream: он работает на движке JavaScriptCore, разработанном Apple для Safari. Заголовки и URL-адреса используют реализацию Safari.

Преимущества Bun.js

 Основные плюсы Bun.

  • Много интерфейсов — инструмент реализует большинство API-интерфейсов Node.js, отдавая приоритет тем, которые наиболее часто используются разработчиками. Это fs, path и Buffer.
  • TypeScript и JSX — раньше требовался этап транспиляции для запуска TypeScript или JSX с Node, например tsc && node index.js. В качестве альтернативы мы можем запустить его напрямую с помощью стороннего инструмента, который сделает это за нас, например, tsx index.ts. С помощью Bun можно запустить его напрямую. Теперь не придется полагаться на внешние инструменты и manager project.
  • nmp — это крупнейший реестр программного обеспечения в мире, содержащий более двух миллионов пакетов. Инструмент подключается к nmp, используя собственный менеджер пакетов, который до 29 раз быстрее, чем npm. Bun использует глобальный кэш модулей и быстрых системных вызовов, доступных в каждой ОС.
  • Модули ECMAScript и совместимость с CommonJS — когда появился Node.js, не существовало стандартной системы модулей. CommonJS был нужен для переноса кода в другие модули. К 2015 году ECMAScript представил ESM — систему модулей new engine server. Переход от CommonJS к ESM для Node.js был медленным и сложным. Bun поддерживает обе модульные системы без лишних настроек и позволяет использовать две системы в одном файле.
  • Baked-in bundler — код обычно проходит через сборщик. Это помогает оптимизировать его для среды разработки. В Node.js это делается с помощью сторонних инструментов — Webpack, esbuild или Parcel. Bun поставляется со своим собственным сборщиком в виде API-интерфейса плагина. Он еще и до 224 раз быстрее, чем Webpack, и в 1,76 раза быстрее, чем esbuild.
  • Быстрая и простая в использовании стандартная библиотека — помимо API-интерфейсов Node.js, которые существуют для поддержки проектов Node.js, среда разработки Bun поставляется с набором API-интерфейсов. Они созданы для быстрой и простой работы, например, чтение файла может быть до 10 раз быстрее, чем в Node.js.

Ключевая особенность Bun.js

У Bun есть несколько важных функций, которые способствовали его популярности и производительности как среды выполнения JavaScript. Рассмотрим bundler, test runner, and package manager.

Bundler. Сборщик объединяет код JavaScript и его зависимости в один файл, оптимизируя эффективность его загрузки в браузерах или в приложениях Node.js. В Node.js нет собственного упаковщика, поэтому разработчикам приходится полагаться на сторонние площадки — Rollup, Webpack и Parcel.

Среда разработки предлагает встроенный сборщик, поддерживающий различные форматы модулей. В нем также есть встроенные оптимизации для более быстрой сборки. Этот bundler превосходит другие: он работает в 1,75 раза быстрее, чем esbuild, в 150 раз быстрее, чем Parcel, в 180 раз быстрее, чем Rollup + Terser.

Test runner. Тестирование — это важная часть разработки программного обеспечения. Она помогает выявлять потенциальные проблемы до запуска проекта. Bun также включает в свой набор инструментов программу для запуска тестов.

Традиционно разработчики Node.js используют внешние среды тестирования, такие как Jest. Они гибкие, но иногда добавляют в проект лишние зависимости. Программа запуска тестов Bun использует синтаксис, совместимый с Jest, но работает в 100 раз быстрее.

Bun интегрирует собственную программу запуска тестов, которая работает с синтаксисом Jest. Особое внимание уделяется скорости и совместимости.Благодаря встроенному средству запуска тестов не нужно беспокоиться о настройке и поддержании совместимости средой выполнения и средой тестирования. Можно писать тесты аналогично коду приложения, используя те же языковые функции и API.

Package Manager. Менеджер пакетов, совместимый с Node.js, работает значительно быстрее, чем npm, Yarn и pnpm. Это ускоряет процесс написания кода, уменьшает использование диска и минимизирует объем памяти. Система связывает пакеты для каждого проекта с центральным файлом. Так устраняется необходимость повторной загрузки модулей для других проектов. Использование символических ссылок не считается чем-то новым для менеджеров пакетов. Эта версия же имеет больше плюсов, чем другие.

Команды — еще одна важная и отличительная черта Bun. Они нужны для запуска кода, объединения проектов, выполнения тестов. Самые популярные команды:

  • run: запуск кода JavaScript/TypeScript;
  • build: старт производства;
  • test: запуск тестов с помощью API в стиле Jest;
  • install: установка зависимостей;
  • init: создание нового проекта.

Область применения Bun.js

Области применения Bun:

  • установка пакетов npm;
  • запуск скриптов — разработчики применяют JavaScript и TypeScript для написания скриптов командной строки. Bun — быстрый способ запустить их;
  • конвейеры DevOps и CI/CD — они включают в себя частые манипуляции с пакетами, транспиляцию исходного кода и объединение файлов. То есть выполняют все операции, с которыми встроенные инструменты Bun также могут справиться . Их стоит использовать, чтобы значительно ускорить CI/CD. Также можно уменьшить время выполнения интеграционных тестов.

Примеры использования Bun.js

Функция Bun.file() принимает путь и возвращает экземпляр BunFile. Класс расширяет Blob и позволяет читать файл в различных форматах. Чтобы прочитать файл Buffer, сначала используйте .arrayBuffer(). Затем примените Buffer.from(), чтобы создать Buffer из ArrayBuffer.

const path = "/path/to/package.json";

const file = Bun.file(path);

const arrbuf = await file.arrayBuffer();

const buffer = Buffer.from(arrbuf);

Рассмотрим фрагмент кода, который записывает строку на диск по определенному пути. Он использует быстрый API Bun.write() для эффективной записи данных на диск. Первый аргумент — это пункт назначения, второй — данные для записи:

const path = "/path/to/file.txt";

await Bun.write(path, "Lorem ipsum");

Любые относительные пути будут определяться относительно корня проекта (ближайшего каталога, содержащего файл package.json):

const path = "./file.txt";

await Bun.write(path, "Lorem ipsum");

Можно передать BunFile в качестве места назначения. Bun.write() запишет данные по соответствующему пути:

const path = Bun.file("./file.txt");

await Bun.write(path, "Lorem ipsum");

Bun.write() возвращает количество байтов, записанных на диск:

const path = "./file.txt";

const bytes = await Bun.write(path, "Lorem ipsum");

// => 11

Bun.js против Node.js

Bun создан как альтернатива Node.js. Одно из его ключевых отличий — менеджер пакетов. Менеджер пакетов разработан для ускорения работы и упрощения управления зависимостями проекта. Он также включает в себя инспектор для установления зависимостей. Его применяют и для выявления ошибок.

В этой среде разработки есть test runner. Он помогает ускорить и упростить запуск набора тестов, а также делает процесс разработки проще.

Еще одно важное отличие — среда выполнения JavaScript. Среда выполнения JavaScript построена на языке программирования Zig, что делает ее быстрой. Она также включает в себя такие функции, как встроенный HTTP-сервер и сервер WebSocket. Они упрощают создание и запуск веб-приложений.

Однако среда разработки все еще нуждается в доработке. У нее не хватает некоторых функций, которые есть у Node.js. Также недостаточно развито сообщество. Однако команда создателей работает над улучшением поддержки, выпускает новые инструкции и обновления.