import Run from "/snippets/cli/run.mdx";
Bun ランタイムは、高速に起動し、高速に実行するように設計されています。
内部では、Bun は Apple が Safari 用に開発している JavaScriptCore エンジン を使用しています。ほとんどの場合、スタートアップと実行のパフォーマンスは、Node.js と Chromium ベースのブラウザで使用されている V8 よりも高速です。そのトランスパイラーとランタイムは、モダンで高性能な言語である Zig で書かれています。Linux では、これにより Node.js より 4 倍高速 なスタートアップ時間が実現されます。
| コマンド | 時間 |
|---|---|
bun hello.js | 5.2ms |
node hello.js | 25.1ms |
このベンチマークは、Linux でシンプルな Hello World スクリプトを実行することに基づいています。
ファイルを実行する
ソースファイルを実行するには 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 を使用する場合、--watch のような Bun フラグは 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.'Cleaning...
Done.Bun はサブシェルでスクリプトコマンドを実行します。Linux と macOS では、次のシェルの順序でチェックし、最初に見つかったものを使用します:bash、sh、zsh。Windows では、bash 風の構文と多くの一般的なコマンドをサポートするために bun shell を使用します。
NOTE
⚡️ Linux での `npm run` のスタートアップ時間は約 170ms です。Bun では `6ms` です。スクリプトは、より短いコマンド bun <script> でも実行できますが、同じ名前の組み込み bun コマンドがある場合、組み込みコマンドが優先されます。この場合、パッケージスクリプトを実行するには、より明示的な bun run <script> コマンドを使用してください。
bun run dev利用可能なスクリプトのリストを表示するには、引数なしで bun run を実行します。
bun runquickstart scripts:
bun run clean
rm -rf dist && echo 'Done.'
bun run dev
bun server.ts
2 scriptsBun はライフサイクルフックを尊重します。例えば、bun run clean は定義されていれば preclean と postclean を実行します。pre<script> が失敗した場合、Bun はスクリプト自体を実行しません。
--bun
package.json スクリプトは、vite や next のようなローカルにインストールされた CLI を参照するのが一般的です。これらの CLI は、shebang でマークされた JavaScript ファイルであることが多く、node で実行することを示しています。
#!/usr/bin/env node
// do stuffデフォルトでは、Bun はこの shebang を尊重し、スクリプトを node で実行します。ただし、--bun フラグを使用してこの動作を上書きできます。Node.js ベースの CLI の場合、これにより CLI が Node.js ではなく Bun で実行されます。
bun run --bun viteフィルタリング
複数のパッケージを含むモノレポでは、--filter 引数を使用して、複数のパッケージで一度にスクリプトを実行できます。
bun run --filter <name_pattern> <script> を使用して、<name_pattern> に一致する名前のすべてのパッケージで <script> を実行します。 例えば、foo、bar、baz という名前のパッケージを含むサブディレクトリがある場合、
bun run --filter 'ba*' <script>を実行すると、foo ではなく bar と baz の両方で <script> が実行されます。
詳細については、filter のドキュメントページをご覧ください。
bun run - で stdin からコードをパイプする
bun run - を使用すると、JavaScript、TypeScript、TSX、または JSX を stdin から読み取り、一時ファイルに書き込まずに実行できます。
echo "console.log('Hello')" | bun run -Hellobun run - を使用してファイルを Bun にリダイレクトすることもできます。例えば、.js ファイルを .ts ファイルとして実行するには:
echo "console.log!('This is TypeScript!' as any)" > secretly-typescript.js
bun run - < secretly-typescript.jsThis is TypeScript!便宜上、bun run - を使用する場合、すべてのコードは JSX サポート付きの TypeScript として扱われます。
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 は、--smol フラグの有無にかかわらず、利用可能なメモリ(cgroups やその他のメモリ制限を考慮)に基づいてガベージコレクターのヒープサイズを自動的に調整するため、これは主にヒープサイズをよりゆっくりと成長させたい場合に役立ちます。
解決順序
絶対パスおよび ./ または .\\ で始まるパスは、常にソースファイルとして実行されます。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