nodejs/node
GitHub: nodejs/node
Node.js 是一个开源且跨平台的 JavaScript 运行时环境,允许开发者在浏览器之外构建可扩展的服务器端和网络应用。
Stars: 116700 | Forks: 35334
# Node.js
Node.js 是一个开源、跨平台的 JavaScript 运行时环境。
有关使用 Node.js 的信息,请参阅 [Node.js 网站][]。
Node.js 项目采用 [开放治理模式](./GOVERNANCE.md)。[OpenJS
Foundation][] 为该项目提供支持。
贡献者应以协作方式行事,以推动项目向前发展。我们鼓励进行建设性的意见交换和妥协。[TSC](./GOVERNANCE.md#technical-steering-committee) 保留限制或阻止那些反复以劝阻、耗竭或以其他方式负面影响其他参与者的方式行事的贡献者的权利。
**本项目有一份[行为准则][Code of Conduct]。**
## 目录
* [支持](#support)
* [发布类型](#release-types)
* [下载](#download)
* [Current 和 LTS 版本](#current-and-lts-releases)
* [Nightly 版本](#nightly-releases)
* [API 文档](#api-documentation)
* [验证二进制文件](#verifying-binaries)
* [构建 Node.js](#building-nodejs)
* [安全](#security)
* [为 Node.js 做贡献](#contributing-to-nodejs)
* [现任项目团队成员](#current-project-team-members)
* [TSC (技术指导委员会)](#tsc-technical-steering-committee)
* [协作者](#collaborators)
* [分类员](#triagers)
* [发布密钥](#release-keys)
* [许可证](#license)
## 支持
需要帮助?请查看[获取支持的说明](.github/SUPPORT.md)。
## 发布类型
* **Current**:处于积极开发阶段。Current 版本的代码位于其主要版本号的分支中(例如,[v22.x](https://github.com/nodejs/node/tree/v22.x))。Node.js 每 6 个月发布一个新的主要版本,允许进行破坏性更改。这发生在每年的 4 月和 10 月。每年 10 月发布的版本支持周期为 8 个月。每年 4 月发布的版本会在随后的 10 月转为 LTS(见下文)。
* **LTS**:获得长期支持的版本,侧重于稳定性和安全性。每个偶数主版本将成为一个 LTS 版本。LTS 版本获得 12 个月的 _Active LTS_ 支持和额外的 18 个月 _Maintenance_(维护)。LTS 版本线具有按字母顺序排列的代码名称,从 v4 Argon 开始。除某些特殊情况外,不会有破坏性更改或功能增加。
* **Nightly**:Current 分支中有更改时每 24 小时构建一次的代码。请谨慎使用。
Current 和 LTS 版本遵循[语义化版本控制](https://semver.org)。发布团队的成员会[签署](#release-keys) 每个 Current 和 LTS 版本。
欲了解更多信息,请参阅 [Release README](https://github.com/nodejs/Release#readme)。
### 下载
二进制文件、安装程序和源代码压缩包可在 https://nodejs.org/en/download/ 获取。
#### Current 和 LTS 版本
https://nodejs.org/download/release/
[latest](https://nodejs.org/download/release/latest/) 目录是最新 Current 版本的别名。latest-_codename_ 目录是某个 LTS 版本线最新版本的别名。例如,[latest-hydrogen](https://nodejs.org/download/release/latest-hydrogen/) 目录包含最新的 Hydrogen (Node.js 18) 版本。
#### Nightly 版本
https://nodejs.org/download/nightly/
每个目录和文件名都包含版本号(例如 `v22.0.0`),后跟 UTC 日期(例如 `20240424` 代表 2024 年 4 月 24 日),以及该发布 HEAD 的简短提交 SHA(例如 `ddd0a9e494`)。
例如,一个完整的目录名可能看起来像 `v22.0.0-nightly20240424ddd0a9e494`。
#### API 文档
最新的 Current 版本文档位于 https://nodejs.org/api/。
特定版本的文档可在每个发布目录的 _docs_ 子目录中找到。特定版本的文档也位于 https://nodejs.org/download/docs/。
### 验证二进制文件
下载目录包含一个 `SHASUMS256.txt.asc` 文件,其中包含文件的 SHA 校验和以及发布者的 PGP 签名。
您可以从 nodejs/release-keys 获取受信任的密钥环,例如使用 `curl`:
```
curl -fsLo "/path/to/nodejs-keyring.kbx" "https://github.com/nodejs/release-keys/raw/HEAD/gpg/pubring.kbx"
```
或者,您可以将发布者的密钥导入到您的默认密钥环中,有关如何执行此操作的命令,请参阅 [发布密钥](#release-keys)。
然后,您可以验证本地下载的文件(如果您使用的是默认密钥环,请传递 `--keyring="${GNUPGHOME:-~/.gnupg}/pubring.kbx"`):
```
curl -fsO "https://nodejs.org/dist/${VERSION}/SHASUMS256.txt.asc" \
&& gpgv --keyring="/path/to/nodejs-keyring.kbx" --output SHASUMS256.txt < SHASUMS256.txt.asc \
&& shasum --check SHASUMS256.txt --ignore-missing
```
## 构建 Node.js
有关如何从源代码构建 Node.js 的说明和支持的平台列表,请参阅 [BUILDING.md](BUILDING.md)。
## 安全
有关报告 Node.js 中安全漏洞的信息,请参阅 [SECURITY.md](./SECURITY.md)。
## 为 Node.js 做贡献
* [为项目做贡献][Contributing to Node.js]
* [工作组][Working Groups]
* [战略举措][Strategic initiatives]
* [技术价值观和优先级排序][Technical values and prioritization]
## 现任项目团队成员
有关 Node.js 项目治理的信息,请参阅 [GOVERNANCE.md](./GOVERNANCE.md)。
* [aduh95](https://github.com/aduh95) -
**Antoine du Hamel** <> (he/him)
* [anonrig](https://github.com/anonrig) -
**Yagiz Nizipli** <> (he/him)
* [benjamingr](https://github.com/benjamingr) -
**Benjamin Gruenbaum** <>
* [BridgeAR](https://github.com/BridgeAR) -
**Ruben Bridgewater** <> (he/him)
* [gireeshpunathil](https://github.com/gireeshpunathil) -
**Gireesh Punathil** <> (he/him)
* [jasnell](https://github.com/jasnell) -
**James M Snell** <> (he/him)
* [joyeecheung](https://github.com/joyeecheung) -
**Joyee Cheung** <> (she/her)
* [legendecas](https://github.com/legendecas) -
**Chengzhong Wu** <> (he/him)
* [marco-ippolito](https://github.com/marco-ippolito) -
**Marco Ippolito** <> (he/him)
* [mcollina](https://github.com/mcollina) -
**Matteo Collina** <> (he/him)
* [panva](https://github.com/panva) -
**Filip Skokan** <> (he/him)
* [RafaelGSS](https://github.com/RafaelGSS) -
**Rafael Gonzaga** <> (he/him)
* [RaisinTen](https://github.com/RaisinTen) -
**Darshan Sen** <> (he/him)
* [richardlau](https://github.com/richardlau) -
**Richard Lau** <>
* [ronag](https://github.com/ronag) -
**Robert Nagy** <>
* [ruyadorno](https://github.com/ruyadorno) -
**Ruy Adorno** <> (he/him)
* [ShogunPanda](https://github.com/ShogunPanda) -
**Paolo Insogna** <> (he/him)
* [targos](https://github.com/targos) -
**Michaël Zasso** <> (he/him)
* [tniessen](https://github.com/tniessen) -
**Tobias Nießen** <> (he/him)
#### TSC 普通成员
* [BethGriggs](https://github.com/BethGriggs) -
**Beth Griggs** <> (she/her)
* [bnoordhuis](https://github.com/bnoordhuis) -
**Ben Noordhuis** <>
* [cjihrig](https://github.com/cjihrig) -
**Colin Ihrig** <> (he/him)
* [codebytere](https://github.com/codebytere) -
**Shelley Vohr** <> (she/her)
* [GeoffreyBooth](https://github.com/GeoffreyBooth) -
**Geoffrey Booth** <> (he/him)
* [MoLow](https://github.com/MoLow) -
**Moshe Atlow** <> (he/him)
* [Trott](https://github.com/Trott) -
**Rich Trott** <> (he/him)
> (she/her)
* [apapirovski](https://github.com/apapirovski) -
**Anatoli Papirovski** <> (he/him)
* [ChALkeR](https://github.com/ChALkeR) -
**Сковорода Никита Андреевич** <> (he/him)
* [chrisdickinson](https://github.com/chrisdickinson) -
**Chris Dickinson** <>
* [danbev](https://github.com/danbev) -
**Daniel Bevenius** <> (he/him)
* [danielleadams](https://github.com/danielleadams) -
**Danielle Adams** <> (she/her)
* [evanlucas](https://github.com/evanlucas) -
**Evan Lucas** <> (he/him)
* [fhinkel](https://github.com/fhinkel) -
**Franziska Hinkelmann** <> (she/her)
* [Fishrock123](https://github.com/Fishrock123) -
**Jeremiah Senkpiel** <> (he/they)
* [gabrielschulhof](https://github.com/gabrielschulhof) -
**Gabriel Schulhof** <>
* [gibfahn](https://github.com/gibfahn) -
**Gibson Fahnestock** <> (he/him)
* [indutny](https://github.com/indutny) -
**Fedor Indutny** <>
* [isaacs](https://github.com/isaacs) -
**Isaac Z. Schlueter** <>
* [joshgav](https://github.com/joshgav) -
**Josh Gavant** <>
* [mhdawson](https://github.com/mhdawson) -
**Michael Dawson** <> (he/him)
* [mmarchini](https://github.com/mmarchini) -
**Mary Marchini** <> (she/her)
* [mscdex](https://github.com/mscdex) -
**Brian White** <>
* [MylesBorins](https://github.com/MylesBorins) -
**Myles Borins** <> (he/him)
* [nebrius](https://github.com/nebrius) -
**Bryan Hughes** <>
* [ofrobots](https://github.com/ofrobots) -
**Ali Ijaz Sheikh** <> (he/him)
* [orangemocha](https://github.com/orangemocha) -
**Alexis Campailla** <>
* [piscisaureus](https://github.com/piscisaureus) -
**Bert Belder** <>
* [rvagg](https://github.com/rvagg) -
**Rod Vagg** <>
* [sam-github](https://github.com/sam-github) -
**Sam Roberts** <>
* [shigeki](https://github.com/shigeki) -
**Shigeki Ohtsu** <> (he/him)
* [thourtheye](https://github.com/thefourtheye) -
**Sakthipriyan Vairamani** <> (he/him)
* [TimothyGu](https://github.com/TimothyGu) -
**Tiancheng "Timothy" Gu** <> (he/him)
* [trevnorris](https://github.com/trevnorris) -
**Trevor Norris** <>
协作者在维护 Node.js 项目时遵循 [协作者指南](./doc/contributing/collaborator-guide.md)。
### 分类员
* [1ilsang](https://github.com/1ilsang) -
**Sangchul Lee** <<1ilsang.dev@gmail.com>> (he/him)
* [atlowChemi](https://github.com/atlowChemi) -
**Chemi Atlow** <> (he/him)
* [Ayase-252](https://github.com/Ayase-252) -
**Qingyu Deng** <>
* [bjohansebas](https://github.com/bjohansebas) -
**Sebastian Beltran** <>
* [bmuenzenmeyer](https://github.com/bmuenzenmeyer) -
**Brian Muenzenmeyer** <> (he/him)
* [CanadaHonk](https://github.com/CanadaHonk) -
**Oliver Medhurst** <> (they/them)
* [daeyeon](https://github.com/daeyeon) -
**Daeyeon Jeong** <> (he/him)
* [efekrskl](https://github.com/efekrskl) -
**Efe Karasakal** <
TSC 荣誉成员
#### TSC 荣誉成员 * [addaleax](https://github.com/addaleax) - **Anna Henningsen** <> (he/him) * [gireeshpunathil](https://github.com/gireeshpunathil) - **Gireesh Punathil** <> (he/him)
* [gurgunday](https://github.com/gurgunday) -
**Gürgün Dayıoğlu** <>
* [haramj](https://github.com/haramj) -
**Haram Jeong** <>
* [HBSPS](https://github.com/HBSPS) -
**Wiyeong Seo** <>
* [iam-frankqiu](https://github.com/iam-frankqiu) -
**Frank Qiu** <> (he/him)
* [KevinEady](https://github.com/KevinEady) -
**Kevin Eady** <> (he/him)
* [marsonya](https://github.com/marsonya) -
**Akhil Marsonya** <> (he/him)
* [meixg](https://github.com/meixg) -
**Xuguang Mei** <> (he/him)
* [milesguicent](https://github.com/milesguicent) -
**Miles Guicent** <> (he/him)
* [preveen-stack](https://github.com/preveen-stack) -
**Preveen Padmanabhan** <> (he/him)
* [RaisinTen](https://github.com/RaisinTen) -
**Darshan Sen** <> (he/him)
* [VoltrexKeyva](https://github.com/VoltrexKeyva) -
**Mohammed Keyvanzadeh** <> (he/him)
分类员在响应新 issue 时遵循 [分类指南](./doc/contributing/issues.md#triaging-a-bug-report)。
### 发布密钥
Node.js 发布者的主要 GPG 密钥(某些发布者使用子密钥签名):
* **Antoine du Hamel** <>
`5BE8A3F6C8A5C01D106C0AD820B1A390B168D356`
* **Juan José Arboleda** <>
`DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7`
* **Marco Ippolito** <>
`CC68F5A3106FF448322E48ED27F5E38D5B0A215F`
* **Michaël Zasso** <>
`8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600`
* **Rafael Gonzaga** <>
`890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4`
* **Richard Lau** <>
`C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C`
* **Ruy Adorno** <>
`108F52B48DB57BB0CC439B2997B01419BD92F80A`
* **Ulises Gascón** <>
`A363A499291CBBC940DD62E41F10027AF002F8B0`
您可以使用项目维护的密钥环,地址为 https://github.com/nodejs/release-keys/raw/refs/heads/main/gpg-only-active-keys/pubring.kbx。
或者,您可以从公共密钥服务器导入它们。请注意,项目无法保证服务器的可用性以及该服务器上的密钥。
```
gpg --keyserver hkps://keys.openpgp.org --recv-keys 5BE8A3F6C8A5C01D106C0AD820B1A390B168D356 # Antoine du Hamel
gpg --keyserver hkps://keys.openpgp.org --recv-keys DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 # Juan José Arboleda
gpg --keyserver hkps://keys.openpgp.org --recv-keys CC68F5A3106FF448322E48ED27F5E38D5B0A215F # Marco Ippolito
gpg --keyserver hkps://keys.openpgp.org --recv-keys 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 # Michaël Zasso
gpg --keyserver hkps://keys.openpgp.org --recv-keys 890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4 # Rafael Gonzaga
gpg --keyserver hkps://keys.openpgp.org --recv-keys C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C # Richard Lau
gpg --keyserver hkps://keys.openpgp.org --recv-keys 108F52B48DB57BB0CC439B2997B01419BD92F80A # Ruy Adorno
gpg --keyserver hkps://keys.openpgp.org --recv-keys A363A499291CBBC940DD62E41F10027AF002F8B0 # Ulises Gascón
```
有关如何使用这些密钥验证下载的文件,请参阅 [验证二进制文件](#verifying-binaries)。
>
`C0D6248439F1D5604AAFFB4021D900FFDB233756`
* **Beth Griggs** <>
`4ED778F539E3634C779C87C6D7062848A1AB005C`
* **Bryan English** <>
`141F07595B7B3FFE74309A937405533BE57C7D57`
* **Chris Dickinson** <>
`9554F04D7259F04124DE6B476D5A82AC7E37093B`
* **Colin Ihrig** <>
`94AE36675C464D64BAFA68DD7434390BDBE9B9C5`
* **Danielle Adams** <>
`1C050899334244A8AF75E53792EF661D867B9DFA`
`74F12602B6F1C4E913FAA37AD3A89613643B6201`
* **Evan Lucas** <>
`B9AE9905FFD7803F25714661B63B535A4C206CA9`
* **Gibson Fahnestock** <>
`77984A986EBC2AA786BC0F66B01FBB92821C587A`
* **Isaac Z. Schlueter** <>
`93C7E9E91B49E432C2F75674B0A78B0A6C481CF6`
* **Italo A. Casas** <>
`56730D5401028683275BD23C23EFEFE93C4CFFFE`
* **James M Snell** <>
`71DCFD284A79C3B38668286BC97EC7A07EDE3FC1`
* **Jeremiah Senkpiel** <>
`FD3A5288F042B6850C66B31F09FE44734EB7990E`
* **Juan José Arboleda** <>
`61FC681DFB92A079F1685E77973F295594EC4689`
* **Julien Gilli** <>
`114F43EE0176B71C7BC219DD50A3051F888C628D`
* **Myles Borins** <>
`C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8`
* **Rod Vagg** <>
`DD8F2338BAE7501E3DD5AC78C273792F7D83545D`
* **Ruben Bridgewater** <>
`A48C2BEE680E841632CD4E44F07496B3EB3C1762`
* **Shelley Vohr** <>
`B9E2F5981AA6E0CD28160D9FF13993A75599653C`
* **Timothy J Fontaine** <>
`7937DFD2AB06298B2293C3187D33FF9D0246406D`
项目维护一个能够验证 Node.js 所有过去版本的密钥环,地址为
https://github.com/nodejs/release-keys/raw/refs/heads/main/gpg/pubring.kbx。
### 安全发布管理员
在可能的情况下,参与安全发布管理员轮值的承诺由公司做出,以确保作为安全管理员的个人能够获得其雇主的支持和认可,从而能够优先处理安全发布。安全发布管理员按照 [安全发布流程](> (he/him)
* [HeroDevs](https://www.herodevs.com/)
* [juanarbol](https://github.com/juanarbol) - OpenJS Slack handle: `juanarbol`
**Juan José Arboleda** <> (he/him)
* [marco-ippolito](https://github.com/marco-ippolito) - OpenJS Slack handle: `Marco Ippolito`
**Marco Ippolito** <> (he/him)
* [NodeSource](https://nodesource.com/)
* [RafaelGSS](https://github.com/RafaelGSS) - OpenJS Slack handle: `RafaelGSS`
**Rafael Gonzaga** <> (he/him)
* [Platformatic](https://platformatic.dev/)
* [mcollina](https://github.com/mcollina) - OpenJS Slack handle: `mcollina`
**Matteo Collina** <> (he/him)
* [Red Hat](https://redhat.com) / [IBM](https://ibm.com)
* [BethGriggs](https://github.com/BethGriggs) -
**Beth Griggs** <> (she/her)
* [sxa](https://github.com/sxa) -
**Stewart X Addison** <> (he/him)
## 许可证
Node.js 根据 [MIT 许可证](https://opensource.org/licenses/MIT) 获得许可。
本项目还依赖可能使用不同开源许可证的外部库。有关包含的许可证的完整列表,请参阅 [LICENSE](https://github.com/nodejs/node/blob/main/LICENSE) 文件。
如果您正在贡献文档或源代码更改,请确保您的添加内容符合项目的许可证准则。
用于签署某些先前版本的其他密钥
* **Antoine du Hamel** <标签:API文档, CMS安全, DNS解析, GNU通用公共许可证, JavaScript, LTS, Node.js, OpenJS基金会, SOC Prime, V8引擎, 事件驱动, 二进制验证, 代码规范, 后端开发, 安全, 开发工具, 开源项目, 技术指导委员会, 数据可视化, 构建Node.js, 版本管理, 社区治理, 编程语言, 贡献指南, 超时处理, 运行时, 长期支持, 非阻塞I/O