import Run from "/snippets/cli/run.mdx";
Среда выполнения Bun создана для быстрого запуска и быстрой работы.
Под капотом Bun использует движок JavaScriptCore, который разработан Apple для Safari. В большинстве случаев производительность запуска и работы выше, чем у V8 — движка, используемого Node.js и браузерами на основе Chromium. Его транспайлер и среда выполнения написаны на Zig — современном высокопроизводительном языке. На Linux это означает время запуска в 4 раза быстрее, чем у Node.js.
| Команда | Время |
|---|---|
bun hello.js | 5,2 мс |
node hello.js | 25,1 мс |
Этот бенчмарк основан на запуске простого скрипта Hello World на Linux.
Запуск файла
Используйте bun run для выполнения исходного файла.
bun run index.jsBun поддерживает TypeScript и JSX из коробки. Каждый файл транспилируется на лету быстрым нативным транспайлером Bun перед выполнением.
bun run index.js
bun run index.jsx
bun run index.ts
bun run index.tsxАльтернативно, можно опустить ключевое слово run и использовать «голую» команду; она ведёт себя идентично.
bun index.tsx
bun index.js--watch
Для запуска файла в режиме наблюдения используйте флаг --watch.
bun --watch run index.tsx::: note При использовании bun run размещайте флаги Bun, такие как --watch, сразу после bun. :::
bun --watch run dev # ✔️ делайте так
bun run dev --watch # ❌ не делайте такФлаги, расположенные в конце команды, будут проигнорированы и переданы самому скрипту "dev".
Запуск скрипта package.json
::: note Сравните с npm run <script> или yarn <script> :::
bun [флаги bun] run <script> [флаги скрипта]Ваш package.json может определять несколько именованных "scripts", которые соответствуют командам оболочки.
{
// ... другие поля
"scripts": {
"clean": "rm -rf dist && echo 'Done.'",
"dev": "bun server.ts"
}
}Используйте bun run <script> для выполнения этих скриптов.
bun run clean
rm -rf dist && echo 'Done.'Очистка...
Готово.Bun выполняет команду скрипта в подпроцессе оболочки. На Linux и macOS он проверяет следующие оболочки по порядку, используя первую найденную: bash, sh, zsh. На Windows используется оболочка Bun для поддержки синтаксиса, подобного bash, и многих распространённых команд.
NOTE
⚡️ Время запуска `npm run` на Linux составляет примерно 170 мс; с Bun оно составляет `6 мс`.Скрипты также можно запускать более короткой командой bun <script>, однако если существует встроенная команда bun с тем же именем, встроенная команда имеет приоритет. В этом случае используйте более явную команду bun run <script> для выполнения вашего скрипта пакета.
bun run devЧтобы увидеть список доступных скриптов, запустите bun run без аргументов.
bun runСкрипты 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.
#!/usr/bin/env node
// делаем что-тоПо умолчанию Bun соблюдает этот shebang и выполняет скрипт с помощью node. Однако вы можете переопределить это поведение с помощью флага --bun. Для CLI на основе Node.js это запустит CLI с Bun вместо Node.js.
bun run --bun viteФильтрация
В монорепозиториях, содержащих несколько пакетов, можно использовать аргумент --filter для выполнения скриптов во многих пакетах одновременно.
Используйте bun run --filter <шаблон_имени> <script> для выполнения <script> во всех пакетах, чьё имя соответствует <шаблон_имени>. Например, если у вас есть подкаталоги с пакетами named foo, bar и baz, выполнение
bun run --filter 'ba*' <script>выполнит <script> как в bar, так и в baz, но не в foo.
Подробнее см. на странице документации filter.
bun run - для передачи кода из stdin
bun run - позволяет читать JavaScript, TypeScript, TSX или JSX из stdin и выполнять его без предварительной записи во временный файл.
echo "console.log('Hello')" | bun run -HelloВы также можете использовать bun run - для перенаправления файлов в Bun. Например, чтобы запустить .js файл как .ts файл:
echo "console.log!('This is TypeScript!' as any)" > secretly-typescript.js
bun run - < secretly-typescript.jsThis is TypeScript!Для удобства весь код обрабатывается как TypeScript с поддержкой JSX при использовании bun run -.
bun run --console-depth
Управляйте глубиной проверки объектов в выводе консоли с помощью флага --console-depth.
bun --console-depth 5 run index.tsxЭто устанавливает, насколько глубоко вложенные объекты отображаются в выводе console.log(). Глубина по умолчанию равна 2. Более высокие значения показывают больше вложенных свойств, но могут создавать многословный вывод для сложных объектов.
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 для уменьшения использования памяти ценой производительности.
bun --smol run index.tsxЭто заставляет сборщик мусора работать чаще, что может замедлить выполнение. Однако это может быть полезно в средах с ограниченной памятью. Bun автоматически настраивает размер кучи сборщика мусора на основе доступной памяти (учитывая cgroups и другие ограничения памяти) как с флагом --smol, так и без него, поэтому это в основном полезно для случаев, когда вы хотите, чтобы размер кучи рос медленнее.
Порядок разрешения
Абсолютные пути и пути, начинающиеся с ./ или .\\, всегда выполняются как исходные файлы. Если не используется bun run, запуск файла с допустимым расширением будет предпочитать файл, а не скрипт package.json.
Когда существует скрипт package.json и файл с тем же именем, bun run отдаёт приоритет скрипту package.json. Полный порядок разрешения:
- Скрипты package.json, например
bun run build - Исходные файлы, например
bun run src/main.js - Бинарники из пакетов проекта, например
bun add eslint && bun run eslint - (только
bun run) Системные команды, напримерbun run ls