Skip to content

import Run from "/snippets/cli/run.mdx";

Среда выполнения Bun создана для быстрого запуска и быстрой работы.

Под капотом Bun использует движок JavaScriptCore, который разработан Apple для Safari. В большинстве случаев производительность запуска и работы выше, чем у V8 — движка, используемого Node.js и браузерами на основе Chromium. Его транспайлер и среда выполнения написаны на Zig — современном высокопроизводительном языке. На Linux это означает время запуска в 4 раза быстрее, чем у Node.js.

КомандаВремя
bun hello.js5,2 мс
node hello.js25,1 мс

Этот бенчмарк основан на запуске простого скрипта Hello World на Linux.

Запуск файла

Используйте bun run для выполнения исходного файла.

bash
bun run index.js

Bun поддерживает TypeScript и JSX из коробки. Каждый файл транспилируется на лету быстрым нативным транспайлером Bun перед выполнением.

bash
bun run index.js
bun run index.jsx
bun run index.ts
bun run index.tsx

Альтернативно, можно опустить ключевое слово run и использовать «голую» команду; она ведёт себя идентично.

bash
bun index.tsx
bun index.js

--watch

Для запуска файла в режиме наблюдения используйте флаг --watch.

bash
bun --watch run index.tsx

::: note При использовании bun run размещайте флаги Bun, такие как --watch, сразу после bun. :::

bash
bun --watch run dev # ✔️ делайте так
bun run dev --watch # ❌ не делайте так

Флаги, расположенные в конце команды, будут проигнорированы и переданы самому скрипту "dev".

Запуск скрипта package.json

::: note Сравните с npm run <script> или yarn <script> :::

sh
bun [флаги bun] run <script> [флаги скрипта]

Ваш package.json может определять несколько именованных "scripts", которые соответствуют командам оболочки.

json
{
  // ... другие поля
  "scripts": {
    "clean": "rm -rf dist && echo 'Done.'",
    "dev": "bun server.ts"
  }
}

Используйте bun run <script> для выполнения этих скриптов.

bash
bun run clean
rm -rf dist && echo 'Done.'
txt
Очистка...
Готово.

Bun выполняет команду скрипта в подпроцессе оболочки. На Linux и macOS он проверяет следующие оболочки по порядку, используя первую найденную: bash, sh, zsh. На Windows используется оболочка Bun для поддержки синтаксиса, подобного bash, и многих распространённых команд.

NOTE

⚡️ Время запуска `npm run` на Linux составляет примерно 170 мс; с Bun оно составляет `6 мс`.

Скрипты также можно запускать более короткой командой bun <script>, однако если существует встроенная команда bun с тем же именем, встроенная команда имеет приоритет. В этом случае используйте более явную команду bun run <script> для выполнения вашего скрипта пакета.

bash
bun run dev

Чтобы увидеть список доступных скриптов, запустите bun run без аргументов.

bash
bun run
txt
Скрипты quickstart:

 bun run clean
   rm -rf dist && echo 'Done.'

 bun run dev
   bun server.ts

2 скрипта

Bun соблюдает хуки жизненного цикла. Например, bun run clean выполнит preclean и postclean, если они определены. Если pre<script> завершится неудачей, Bun не выполнит сам скрипт.

--bun

Часто скрипты package.json ссылаются на локально установленные CLI, такие как vite или next. Эти CLI часто представляют собой JavaScript-файлы с shebang, указывающим, что они должны выполняться с помощью node.

js
#!/usr/bin/env node

// делаем что-то

По умолчанию Bun соблюдает этот shebang и выполняет скрипт с помощью node. Однако вы можете переопределить это поведение с помощью флага --bun. Для CLI на основе Node.js это запустит CLI с Bun вместо Node.js.

bash
bun run --bun vite

Фильтрация

В монорепозиториях, содержащих несколько пакетов, можно использовать аргумент --filter для выполнения скриптов во многих пакетах одновременно.

Используйте bun run --filter <шаблон_имени> <script> для выполнения <script> во всех пакетах, чьё имя соответствует <шаблон_имени>. Например, если у вас есть подкаталоги с пакетами named foo, bar и baz, выполнение

bash
bun run --filter 'ba*' <script>

выполнит <script> как в bar, так и в baz, но не в foo.

Подробнее см. на странице документации filter.

bun run - для передачи кода из stdin

bun run - позволяет читать JavaScript, TypeScript, TSX или JSX из stdin и выполнять его без предварительной записи во временный файл.

bash
echo "console.log('Hello')" | bun run -
txt
Hello

Вы также можете использовать bun run - для перенаправления файлов в Bun. Например, чтобы запустить .js файл как .ts файл:

bash
echo "console.log!('This is TypeScript!' as any)" > secretly-typescript.js
bun run - < secretly-typescript.js
txt
This is TypeScript!

Для удобства весь код обрабатывается как TypeScript с поддержкой JSX при использовании bun run -.

bun run --console-depth

Управляйте глубиной проверки объектов в выводе консоли с помощью флага --console-depth.

bash
bun --console-depth 5 run index.tsx

Это устанавливает, насколько глубоко вложенные объекты отображаются в выводе console.log(). Глубина по умолчанию равна 2. Более высокие значения показывают больше вложенных свойств, но могут создавать многословный вывод для сложных объектов.

ts
const nested = { a: { b: { c: { d: "deep" } } } };
console.log(nested);
// С --console-depth 2 (по умолчанию): { a: { b: [Object] } }
// С --console-depth 4: { a: { b: { c: { d: 'deep' } } } }

bun run --smol

В средах с ограниченной памятью используйте флаг --smol для уменьшения использования памяти ценой производительности.

bash
bun --smol run index.tsx

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

Порядок разрешения

Абсолютные пути и пути, начинающиеся с ./ или .\\, всегда выполняются как исходные файлы. Если не используется bun run, запуск файла с допустимым расширением будет предпочитать файл, а не скрипт package.json.

Когда существует скрипт package.json и файл с тем же именем, bun run отдаёт приоритет скрипту package.json. Полный порядок разрешения:

  1. Скрипты package.json, например bun run build
  2. Исходные файлы, например bun run src/main.js
  3. Бинарники из пакетов проекта, например bun add eslint && bun run eslint
  4. (только bun run) Системные команды, например bun run ls

Bun от www.bunjs.com.cn