bun install — это совместимый с Node.js npm-клиент, разработанный для быстрой замены npm.
Мы приложили много усилий, чтобы сделать процесс миграции с npm install на bun install максимально простым — достаточно выполнить bun install вместо npm install.
- Разработан для Node.js и Bun:
bun installустанавливает совместимую с Node.js папкуnode_modules. Вы можете использовать его вместоnpm installдля проектов Node.js без каких-либо изменений кода и без использования среды выполнения Bun. - Автоматически конвертирует
package-lock.jsonв формат lockfilebun.lockот Bun, сохраняя существующие версии зависимостей без какой-либо ручной работы с вашей стороны. Вы можете тайно использоватьbun installвместоnpm installна работе, и никто не заметит. - Совместим с
.npmrc: bun install читает конфигурацию npm-registry из.npmrcот npm, поэтому вы можете использовать одну и ту же конфигурацию для npm и Bun. - Жёсткие ссылки: В Windows и Linux
bun installиспользует жёсткие ссылки для экономии места на диске и времени установки.
# Для миграции требуется только одна команда
bun i
# Для добавления зависимостей:
bun i @types/bun
# Для добавления devDependencies:
bun i -d @types/bun
# Для удаления зависимости:
bun rm @types/bunЗапуск скриптов package.json быстрее
Запускайте скрипты из package.json, исполняемые файлы из node_modules/.bin (похоже на npx) и JavaScript/TypeScript файлы (как node) — всё это с помощью одной простой команды.
| NPM | Bun |
|---|---|
npm run <script> | bun <script> |
npm exec <bin> | bun <bin> |
node <file> | bun <file> |
npx <package> | bunx <package> |
Когда вы используете bun run <executable>, он выберет локально установленный исполняемый файл
# Запустить скрипт package.json:
bun my-script
bun run my-script
# Запустить исполняемый файл в node_modules/.bin:
bun my-executable # например tsc, esbuild и т.д.
bun run my-executable
# Запустить JavaScript/TypeScript файл:
bun ./index.tsWorkspaces? Да.
bun install поддерживает workspaces аналогично npm, с дополнительными функциями.
В package.json вы можете установить "workspaces" в массив относительных путей.
{
"name": "my-app",
"workspaces": ["packages/*", "apps/*"]
}Фильтрация скриптов по имени workspace
В Bun флаг --filter принимает glob-шаблон и запускает команду параллельно для всех workspace-пакетов с name, соответствующим шаблону, соблюдая порядок зависимостей.
bun --filter 'lib-*' my-script
# вместо:
# npm run --workspace lib-foo --workspace lib-bar my-scriptОбновление зависимостей
Для обновления зависимости вы можете использовать bun update <package>. Это обновит зависимость до последней версии, удовлетворяющей диапазону semver, указанному в package.json.
# Обновить одну зависимость
bun update @types/bun
# Обновить все зависимости
bun update
# Игнорировать semver, обновить до последней версии
bun update @types/bun --latest
# Обновить зависимость до определённой версии
bun update @types/bun@1.3.3
# Обновить все зависимости до последних версий
bun update --latestПросмотр устаревших зависимостей
Для просмотра устаревших зависимостей выполните bun outdated. Это похоже на npm outdated, но с более компактным выводом.
bun outdated┌────────────────────────────────────────┬─────────┬────────┬────────┐
│ Package │ Current │ Update │ Latest │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @types/bun (dev) │ 1.1.6 │ 1.1.10 │ 1.1.10 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @types/react (dev) │ 18.3.3 │ 18.3.8 │ 18.3.8 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @typescript-eslint/eslint-plugin (dev) │ 7.16.1 │ 7.18.0 │ 8.6.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @typescript-eslint/parser (dev) │ 7.16.1 │ 7.18.0 │ 8.6.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @vscode/debugadapter (dev) │ 1.66.0 │ 1.67.0 │ 1.67.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ esbuild (dev) │ 0.21.5 │ 0.21.5 │ 0.24.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ eslint (dev) │ 9.7.0 │ 9.11.0 │ 9.11.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ mitata (dev) │ 0.1.11 │ 0.1.14 │ 1.0.2 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ prettier-plugin-organize-imports (dev) │ 4.0.0 │ 4.1.0 │ 4.1.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ source-map-js (dev) │ 1.2.0 │ 1.2.1 │ 1.2.1 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ typescript (dev) │ 5.5.3 │ 5.6.2 │ 5.6.2 │
└────────────────────────────────────────┴─────────┴────────┴────────┘Список установленных пакетов
Для просмотра списка установленных пакетов вы можете использовать bun pm ls. Это отобразит все пакеты, установленные в папке node_modules, используя lockfile от Bun в качестве источника истины. Вы можете передать флаг -a для отображения всех установленных пакетов, включая транзитивные зависимости.
# Список установленных пакетов верхнего уровня:
bun pm lsmy-pkg node_modules (781)
├── @types/node@20.16.5
├── @types/react@18.3.8
├── @types/react-dom@18.3.0
├── eslint@8.57.1
├── eslint-config-next@14.2.8
...# Список всех установленных пакетов:
bun pm ls -amy-pkg node_modules
├── @alloc/quick-lru@5.2.0
├── @isaacs/cliui@8.0.2
│ └── strip-ansi@7.1.0
│ └── ansi-regex@6.1.0
├── @jridgewell/gen-mapping@0.3.5
├── @jridgewell/resolve-uri@3.1.2
...Создание tarball пакета
Для создания tarball пакета вы можете использовать bun pm pack. Это создаст tarball пакета в текущей директории.
# Создать tarball
bun pm packTotal files: 46
Shasum: 2ee19b6f0c6b001358449ca0eadead703f326216
Integrity: sha512-ZV0lzWTEkGAMz[...]Gl4f8lA9sl97g==
Unpacked size: 0.41MB
Packed size: 117.50KBShebang
Если пакет ссылается на node в shebang #!/usr/bin/env node, bun run по умолчанию будет уважать это и использовать системный исполняемый файл node. Вы можете принудительно использовать node от Bun, передав --bun в bun run.
Когда вы передаёте --bun в bun run, мы создаём символическую ссылку на локально установленный исполняемый файл Bun с именем "node" во временной директории и добавляем её в ваш PATH на время выполнения скрипта.
# Принудительно использовать среду выполнения Bun вместо node
bun --bun my-script
# Это тоже работает:
bun run --bun my-scriptГлобальные установки
Вы можете устанавливать пакеты глобально с помощью bun i -g <package>. По умолчанию это установит в папку .bun/install/global/node_modules внутри вашей домашней директории.
# Установить пакет глобально
bun i -g eslint
# Запустить глобально установленный пакет без префикса `bun run`
eslint --init