跳到主要内容

构建 Windows 版 Bun

This document describes the build process for Windows. If you run into problems, please join the #contributing channel on our Discord for help.

It is strongly recommended to use PowerShell 7 (pwsh.exe) instead of the default powershell.exe.

Prerequisites

Enable Scripts

By default, running unverified scripts are blocked.

> Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted

System Dependencies

Bun v1.1 or later. We use Bun to run it's own code generators.

> irm bun.sh/install.ps1 | iex

Visual Studio with the "Desktop Development with C++" workload. While installing, make sure to install Git as well, if Git for Windows is not already installed.

Visual Studio can be installed graphically using the wizard or through WinGet:

> winget install "Visual Studio Community 2022" --override "--add Microsoft.VisualStudio.Workload.NativeDesktop Microsoft.VisualStudio.Component.Git " -s msstore

After Visual Studio, you need the following:

  • LLVM 18.1.8
  • Go
  • Rust
  • NASM
  • Perl
  • Ruby
  • Node.js
备注

Note – The Zig compiler is automatically downloaded, installed, and updated by the building process.

WinGet or Scoop can be used to install these remaining tools easily:

If you intend on building WebKit locally (optional), you should install these packages:

From here on out, it is expected you use a PowerShell Terminal with .\scripts\env.ps1 sourced. This script is available in the Bun repository and can be loaded by executing it:

> .\scripts\env.ps1

To verify, you can check for an MSVC-only command line such as mt.exe

> Get-Command mt
备注

It is not recommended to install ninja / cmake into your global path, because you may run into a situation where you try to build bun without .\scripts\env.ps1 sourced.

Building

> bun install

> .\scripts\env.ps1
> .\scripts\update-submodules.ps1 # this syncs git submodule state
> .\scripts\all-dependencies.ps1 # this builds all dependencies
> .\scripts\make-old-js.ps1 # runs some old code generators

# Configure build environment
> cmake -Bbuild -GNinja -DCMAKE_BUILD_TYPE=Debug

# Build bun
> ninja -Cbuild

If this was successful, you should have a bun-debug.exe in the build folder.

> .\build\bun-debug.exe --revision

You should add this to $Env:PATH. The simplest way to do so is to open the start menu, type "Path", and then navigate the environment variables menu to add C:\.....\bun\build to the user environment variable PATH. You should then restart your editor (if it does not update still, log out and log back in).

Extra paths

  • WebKit is extracted to build/bun-webkit
  • Zig is extracted to .cache/zig/zig.exe

Tests

You can run the test suite either using bun test, or by using the wrapper script packages\bun-internal-test. The internal test package is a wrapper cli to run every test file in a separate instance of bun.exe, to prevent a crash in the test runner from stopping the entire suite.

# Setup
> bun i --cwd packages\bun-internal-test

# Run the entire test suite with reporter
# the package.json script "test" uses "build/bun-debug.exe" by default
> bun run test

# Run an individual test file:
> bun-debug test node\fs
> bun-debug test "C:\bun\test\js\bun\resolve\import-meta.test.js"

Troubleshooting

.rc file fails to build

llvm-rc.exe is odd. don't use it. use rc.exe, to do this make sure you are in a visual studio dev terminal, check rc /? to ensure it is Microsoft Resource Compiler

failed to write output 'bun-debug.exe': permission denied

you cannot overwrite bun-debug.exe if it is already open. you likely have a running instance, maybe in the vscode debugger?