如何从源码构建 Deno 并运行第一个开发版二进制
【免费下载链接】denoA modern runtime for JavaScript and TypeScript.项目地址: https://gitcode.com/GitHub_Trending/de/deno
当你需要修改 Deno 自身(Rust 代码或 JS/TS 模块)、使用未发布的改动,或想在构建过程中控制编译方式时,需要自己从源码编译出deno二进制并运行它。本文基于仓库的 .github/CONTRIBUTING.md("Building from source" 章节)和 CLAUDE.md,给出一条完整路径:克隆仓库 → 安装依赖 → 构建 → 运行开发版二进制并验证结果。最终产物是仓库根目录下./target/debug/deno这个 debug 二进制。
克隆仓库(必须带子模块)
Deno 使用了子模块,克隆时必须加--recurse-submodules,否则依赖的本地源码不完整。Linux(Debian)、Mac、WSL 下:
git clone --recurse-submodules https://github.com/denoland/deno.gitWindows 需要额外三步:开启开发者模式 Developer Mode(否则符号链接需要管理员权限);确认 git 版本为 2.19.2.windows.1 或更新;在 checkout 前设置符号链接开关:
git config --global core.symlinks true git clone --recurse-submodules https://github.com/denoland/deno.git安装构建依赖
Rust 工具链
Deno 要求特定版本的 Rust,具体由仓库中的 rust-toolchain.toml 指定——当前文件固定为channel = "1.95.0",组件包含rustfmt、clippy、rust-src、rust-analyzer。文档同时提示:其他版本(包括 Rust Nightly Releases)可能不被支持。安装或更新 Rust 后,在仓库目录中检查是否生效:
rustc -V cargo -V原生编译器与链接器
Deno 的很多组件需要原生编译器来构建优化的原生函数,各平台要求如下。
Linux(Debian)/WSL:以下命令会向系统安装 LLVM 17、CMake 与 glib 开发库(apt 部分需要管理员权限):
wget https://apt.llvm.org/llvm.sh chmod +x llvm.sh ./llvm.sh 17 apt install --install-recommends -y cmake libglib2.0-devMac:必须安装 XCode Command Line Tools(XCode 本身已包含;没有 XCode 时运行xcode-select --install安装)。CMake 是额外要求,命令行工具不包含它:
brew install cmakeMac M1/M2(Apple aarch64):还需要安装lld,并把 LLVM 目录加入PATH:
brew install llvm lld # Add /opt/homebrew/opt/llvm/bin/ to $PATHWindows:安装 VS Community 2019 并选择 "Desktop development with C++" 工具集(含文档列出的 Visual C++ tools for CMake、Windows 10 SDK (10.0.17763.0) 等组件);启用 "Debugging Tools for Windows";并确保一个独立的 CMake 在PATH上——像aws-lc-sys(经 rustls 引入)这样的原生依赖会用 CMake 编译 C 代码,而 Visual Studio 自带的 CMake 只在 "Developer Command Prompt" 内可见,cargo在其他位置运行时看不到它。
其他前置条件
- Python 3:文档标注这是运行 WPT 测试的要求,与纯构建无关;但如果要跑 WPT 测试,需确保
PATH中存在无后缀的python/python.exe,且指向 Python 3。 - WSL 内存:确认
.wslconfig中分配了足够的内存,文档建议至少 16GB。
构建 deno 二进制
文档推荐用./x开发者工具构建:
./x build它产出 debug 模式的二进制(未优化、带调试符号),位于./target/debug/deno,底层执行的是cargo build --bin deno(见 tools/x.ts)。需要注意:仓库根目录的x脚本首行是#!/usr/bin/env -S deno run --allow-all --ext=ts,即./x依赖系统里已装好的 deno。手上没有现成 deno 时,直接用 cargo 达到同样效果:
cargo build -vv可选分支:如果要从源码同时构建 Deno 和 V8(用于底层 V8 开发,或没有预编译 V8 的平台):
V8_FROM_SOURCE=1 cargo build -vv该方式可能引入更多依赖,文档将 V8 构建细节指向 rusty_v8 的 README。构建产物是 debug 版;需要 release 优化版本时,文档给出的方式是在仓库根目录直接运行cargo build --release。
运行第一个开发版二进制
构建成功后,文档给出的运行步骤是执行仓库自带的 hello 文件:
./target/debug/deno run tests/testdata/run/002_hello.tstests/testdata/run/002_hello.ts 的内容是一行console.log("Hello World"),终端应输出Hello World——这既是文档指定的验证方式,也说明开发版二进制的 TypeScript 直接执行能力正常。
开发迭代中还有几种运行方式(来自 CLAUDE.md):
# 直接执行一段 JS ./target/debug/deno eval 'console.log("Hello from dev build")' # 带权限标志运行本地文件 ./target/debug/deno run --allow-net --allow-read script.ts # 进入 REPL ./target/debug/deno其中script.ts替换为你自己的脚本路径。Deno 默认安全模型下,网络、文件等能力需要显式授权,--allow-net、--allow-read就是按需放行。
构建报错时先看什么
文档列出两种典型情况:
- 普通构建错误:先确认已更新到最新 main 后重新构建;仍失败则清理后重建:
cargo clean && cargo build -vvlinking with cc failed:通常是系统依赖缺失——macOS 上运行xcode-select --install;Linux 上安装build-essential或等价物。缺cmake、stdarg.h等其他依赖时,回到上一节的 Prerequisites 部分逐项核对。
另外,如果只改 Rust 代码、想快速确认能否编译而不产出二进制,./x check(底层cargo check)跳过链接步骤,明显更快。
可选:用 HMR 模式迭代 JS/TS
如果你接下来要频繁修改 JavaScript/TypeScript 模块,文档推荐在 cargo 参数中加入--features hmr:该模式下 JS/TS 源码不打进二进制、改为运行时读取,修改 JS 后无需重新构建:
cargo build --features hmr cargo run --features hmr -- run hello.ts至此,你拥有一个可从源码复现的开发版 deno:./target/debug/deno能直接运行 TypeScript 文件并输出预期结果。后续修改代码后重复「构建 → 运行验证」即可;文档中./x spec、./x test等测试命令属于贡献流程,不是运行开发版二进制的前置步骤。
【免费下载链接】denoA modern runtime for JavaScript and TypeScript.项目地址: https://gitcode.com/GitHub_Trending/de/deno
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考