在本页
从源码构建 Deno
以下是关于如何从源码构建 Deno 的说明。如果您只想使用 Deno,您可以下载预构建的可执行文件(更多信息请参阅入门
章节)。
克隆仓库 跳转到标题
Deno 使用子模块,因此您必须记住使用 --recurse-submodules
进行克隆。
Linux(Debian)/Mac/WSL
git clone --recurse-submodules https://github.com/denoland/deno.git
Windows:
- 启用“开发者模式”(否则符号链接需要管理员权限)。
- 请确保您使用的是 git 2.19.2.windows.1 或更高版本。
- 在检出之前设置
core.symlinks=true
git config --global core.symlinks true git clone --recurse-submodules https://github.com/denoland/deno.git
先决条件 跳转到标题
Rust 跳转到标题
Deno 需要特定版本的 Rust。Deno 可能不支持在其他版本或 Rust Nightly 版本上构建。特定版本所需的 Rust 版本在 rust-toolchain.toml
文件中指定。
更新或安装 Rust。检查 Rust 是否已正确安装/更新
rustc -V
cargo -V
原生编译器和链接器 跳转到标题
Deno 的许多组件需要原生编译器来构建优化的原生函数。
Linux(Debian)/WSL 跳转到标题
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
./llvm.sh 17
apt install --install-recommends -y cmake libglib2.0-dev
Mac 跳转到标题
Mac 用户必须安装 *XCode 命令行工具*。(XCode 已包含 *XCode 命令行工具*。运行 xcode-select --install
即可在不安装 XCode 的情况下安装。)
还需要 CMake,但它不包含在 *命令行工具* 中。
brew install cmake
Mac M1/M2 跳转到标题
对于 Apple aarch64 用户,必须安装 lld
。
brew install llvm lld
# Add /opt/homebrew/opt/llvm/bin/ to $PATH
Windows 跳转到标题
-
获取包含“使用 C++ 的桌面开发”工具包的 VS Community 2019,并确保选择以下列出的必需工具以及所有 C++ 工具。
- 用于 CMake 的 Visual C++ 工具
- Windows 10 SDK (10.0.17763.0)
- 测试工具核心功能 - 构建工具
- 适用于 x86 和 x64 的 Visual C++ ATL
- 适用于 x86 和 x64 的 Visual C++ MFC
- C++/CLI 支持
- 用于桌面的 VC++ 2015.3 v14.00 (v140) 工具集
-
启用“Windows 调试工具”。
- 转到“控制面板”→“程序”→“程序和功能”
- 选择“Windows 软件开发工具包 - Windows 10”
- →“更改”→“更改”→勾选“Windows 调试工具”→“更改”→“完成”。
- 或者使用:Windows 调试工具(注意:它会下载文件,您需要手动安装
X64 Debuggers And Tools-x64_en-us.msi
文件。)
Protobuf 编译器 跳转到标题
构建 Deno 需要 Protocol Buffers 编译器。
Linux(Debian)/WSL 跳转到标题
apt install -y protobuf-compiler
protoc --version # Ensure compiler version is 3+
Mac 跳转到标题
brew install protobuf
protoc --version # Ensure compiler version is 3+
Windows 跳转到标题
Windows 用户可以从 GitHub 下载最新的二进制版本。
Python 3 跳转到标题
构建 Deno 跳转到标题
构建 Deno 最简单的方法是使用预编译的 V8 版本。
对于 WSL,请确保在 .wslconfig
中分配了足够的内存
cargo build -vv
但是,如果您正在进行底层 V8 开发,或者使用的平台没有 V8 的预编译版本,您可能还需要从源代码构建 Deno 和 V8
V8_FROM_SOURCE=1 cargo build -vv
从源码构建 V8 时,可能会有更多依赖项。有关 V8 构建的更多详细信息,请参阅 rusty_v8 的 README。
构建 跳转到标题
使用 Cargo 构建
# Build:
cargo build -vv
# Build errors? Ensure you have latest main and try building again, or if that doesn't work try:
cargo clean && cargo build -vv
# Run:
./target/debug/deno run tests/testdata/run/002_hello.ts
运行测试 跳转到标题
Deno 有一套用 Rust 和 TypeScript 编写的综合测试套件。可以使用以下命令在构建过程中运行 Rust 测试
cargo test -vv
可以使用以下命令运行 TypeScript 测试
# Run all unit/tests:
target/debug/deno test -A --unstable --lock=tools/deno.lock.json --config tests/config/deno.json tests/unit
# Run a specific test:
target/debug/deno test -A --unstable --lock=tools/deno.lock.json --config tests/config/deno.json tests/unit/os_test.ts
处理多个 Crate 跳转到标题
如果一个变更集跨越多个 Deno crate,您可能希望将多个 crate 一起构建。建议您将所有需要的 crate 并排检出。例如
- denoland/
- deno/
- deno_core/
- deno_ast/
- ...
然后,您可以使用 Cargo 的 patch 功能 来覆盖默认的依赖项路径
cargo build --config 'patch.crates-io.deno_ast.path="../deno_ast"'
如果您正在处理一个需要几天时间的变更集,您可能更愿意将 patch 添加到您的 Cargo.toml
文件中(只需确保在暂存更改之前将其删除)
[patch.crates-io]
deno_ast = { path = "../deno_ast" }
这将从本地路径构建 deno_ast
crate,并链接到该版本,而不是从 crates.io
获取它。
**注意**:Cargo.toml
中的依赖项版本与您磁盘上的依赖项版本匹配非常重要。
使用 cargo search <dependency_name>
来检查版本。