菜单

构建配置

相关源文件

本页面介绍了 Node.js 中的构建配置系统,解释了如何在不同平台上配置和构建代码库。它涵盖了配置过程、构建工具和支持的构建选项。有关跨平台构建的详细信息,请参阅跨平台构建

概述

Node.js 使用支持各种平台、架构和构建选项的多阶段构建配置系统。构建过程从配置阶段开始,该阶段生成特定于平台的构建文件,然后进行实际编译。

构建系统基于 GYP(Generate Your Projects),它从一组配置文件生成特定于平台的构建文件。Node.js 还支持使用 Ninja 进行构建,以提高构建性能。

来源:configure.py173-257 node.gyp1-40 Makefile177-188 vcbuild.bat192-212

配置过程

配置过程因平台而异

Unix/macOS 配置

在包括 macOS 在内的类 Unix 系统上,构建配置始于 ./configure 脚本,它是 configure.py 的封装。此脚本会:

  1. 处理命令行选项
  2. 确定目标平台和架构
  3. 生成包含构建设置的 config.gypi
  4. 运行 GYP 以生成 Makefiles

Windows 配置

在 Windows 上,配置和构建过程由 vcbuild.bat 管理,它会:

  1. 处理命令行选项
  2. 检测 Visual Studio 环境
  3. 运行 configure.py 以生成 config.gypi
  4. 使用 GYP 生成 Visual Studio 项目文件

来源:configure.py44-631 vcbuild.bat77-159 Makefile182-188

关键配置文件

Node.js 构建系统依赖于几个关键配置文件

文件目的
node.gyp主构建配置文件,描述目标、源和依赖项
common.gypi通用构建设置和编译器选项
config.gypi由配置脚本生成的平台特定设置文件
node.gypinode.gyp 包含的 Node.js 特定构建定义
vcbuild.batWindows 构建脚本
MakefileUnix 构建脚本

来源:node.gyp1-820 node.gypi1-146 Makefile1-105 vcbuild.bat22-76

构建变量和选项

Node.js 构建配置支持控制构建执行方式的众多变量和选项。以下是一些最重要的:

核心构建变量

常用构建选项

选项描述默认
--debug使用调试配置进行构建发布
--dest-cpu=x64/arm64/...设置目标 CPU 架构宿主架构
--dest-os=...设置目标操作系统宿主操作系统
--shared构建为共享库 (DLL)false
--with-intl=...国际化支持级别full-icu
--openssl-no-asm禁用 OpenSSL 汇编优化false
--without-npm构建时不包含 npmfalse
--without-snapshot构建时不包含 V8 快照false
--use-largepages启用大页支持false

来源:configure.py84-139 configure.py713-739 vcbuild.bat77-159 node.gyp2-34

构建目标

Node.js 构建系统定义了几个重要的目标

主要构建目标

目标描述
node主 Node.js 可执行文件
libnode作为共享库的 Node.js
v8_initV8 初始化代码
v8_snapshotV8 快照
test运行测试套件
doc构建文档
build-addons构建原生插件测试

来源:node.gyp502-820 node.gyp822-1020 Makefile106-120 Makefile332-363

依赖管理

Node.js 构建系统管理着几个关键依赖项

核心依赖项

构建系统允许通过 --shared-* 配置选项使用这些依赖项的捆绑版本或系统提供的版本。

来源:node.gyp17-27 configure.py260-596 node.gypi146-163

共享库与静态库

Node.js 可以构建为静态链接或动态链接依赖项

配置描述
静态 (默认)依赖项从源代码构建并静态链接
共享依赖项从系统库动态链接

共享库选项通过配置脚本中的 --shared-* 标志控制

./configure --shared-openssl --shared-zlib --shared-libuv

对于每个依赖项,您还可以指定包含路径和库路径

./configure --shared-openssl --shared-openssl-includes=/path/to/includes --shared-openssl-libpath=/path/to/libs

来源:configure.py266-596 node.gyp429-442 node.gypi44-59

国际化支持 (Intl)

Node.js 通过 ICU 库提供多种国际化支持选项

选项描述
--with-intl=full-icu完整国际化支持(默认)
--with-intl=small-icu最小国际化支持(仅英文)
--with-intl=none无国际化支持
--with-icu-source=path从特定源使用 ICU
--with-icu-default-data-dir=path指定 ICU 数据目录

来源:configure.py713-739 node.gyp117-134

平台特定配置

构建系统自动处理平台特定设置

Unix/macOS

  • 使用 GYP 生成的 Makefiles
  • 支持 GCC 和 Clang 工具链
  • 与 Windows 相比,库路径和包含路径的处理方式不同

Windows

  • 使用 GYP 生成的 Visual Studio 项目文件
  • 需要 Visual Studio 2022 或更高版本
  • 对 Windows API 和 DLLs 有特殊处理

交叉编译

Node.js 通过以下选项支持交叉编译

./configure --dest-cpu=arm64 --dest-os=android --cross-compiling

来源:configure.py116-125 vcbuild.bat214-307 node.gyp564-605

V8 集成

Node.js 集成了 V8 JavaScript 引擎,构建系统处理 V8 特定配置

选项描述
--v8-options将选项传递给 V8
--experimental-enable-pointer-compression启用 V8 指针压缩(仅限 64 位)
--trace-maps启用 V8 映射追踪

来源:configure.py635-647 tools/v8_gypfiles/v8.gyp1-36 tools/v8_gypfiles/features.gypi155-163

优化开发构建

对于开发工作流,Node.js 提供了优化构建速度的选项

速度优化

  • 使用 ccache:./configure --use-ccache (或设置 CC="ccache gcc")
  • 从磁盘加载 JS 文件:./configure --node-builtin-modules-path "$(pwd)"
  • 使用 Ninja 构建系统:比 Make 更快

来源:BUILDING.md534-594 configure.py128-141 Makefile279-282

构建系统组件

Node.js 构建系统由几个协同工作的关键组件组成

来源:configure.py1-42 node.gyp37-39 Makefile173-188

常见构建任务

构建 Node.js

在 Unix/macOS 上

在 Windows 上

vcbuild

构建调试版本

在 Unix/macOS 上

在 Windows 上

vcbuild debug

使用共享库构建

为不同架构构建

来源:BUILDING.md274-288 vcbuild.bat77-159 Makefile106-120

结论

Node.js 构建配置系统提供了一种灵活而强大的方式,可以为不同的平台、架构和用例构建 Node.js。了解配置选项和构建过程有助于开发人员更有效地使用 Node.js 代码库。

有关构建 Node.js 特定方面的更多详细信息,请参阅以下资源