# 22.11 Node.js 环境

Node.js 作为基于事件驱动的 JavaScript 运行时，代表了现代 Web 开发技术栈的重要演进。在 FreeBSD 上配置 Node.js 环境，既涉及系统库的版本兼容性问题，也体现了不同技术生态之间的适配与融合。

## 更新基本系统

在 FreeBSD 上配置 Node.js 环境前，我们需要先了解一些系统兼容性方面的注意事项。使用 pkg 安装的二进制 Node.js 依赖于 `/lib/libcrypto.so.xxx` 的特定版本，这意味着在 FreeBSD 上使用 Node.js 时，需要关注 FreeBSD 系统的版本，尤其是当你的 pkg 配置使用 latest 源时。

因此，在 FreeBSD 上安装 Node.js 前，应先更新基本系统，然后再进行安装。

## Yarn + Node.js

使用 pkg 安装：

```sh
# freebsd-update fetch install # 必须先更新基本系统
# pkg install yarn             # 会自动安装对应版本的 nodejs
```

或使用 ports 安装：

```sh
# cd /usr/ports/www/yarn/
# make install clean # 使用 ports 编译可规避上述问题
```

## NPM + Node.js

使用 pkg 安装：

```sh
# pkg install npm  # 安装 NPM 包管理器
```

或使用 ports 安装：

```sh
# cd /usr/ports/www/npm/
# make install clean # 使用 ports 编译可以规避上述问题
```

## FreeBSD NPM 换源

设置 npm 使用国内镜像源以加快下载速度：

```sh
# npm config set registry https://registry.npmmirror.com
```

该地址为原淘宝镜像站，详情见 <https://npmmirror.com>，提供 NPM 国内镜像加速服务说明。

## 故障排除与未竟事宜

在使用 Node.js 的过程中，可能会遇到一些常见问题。下面我们介绍一些常见的故障排除方法。

### ld-elf.so.1 错误

如果你跳过了 FreeBSD 基本系统的更新（`freebsd-update fetch install`）而直接安装软件，那么在 FreeBSD 上，你可能会遇到以下错误：

```sh
# pkg install yarn   # 安装 Yarn 包管理器
$ node              # 启动 Node.js 交互式命令行
ld-elf.so.1: /lib/libcrypto.so.111: version OPENSSL_1_1_1e required by /usr/local/bin/node not found
```

如果使用 Ports 编译安装，上述问题不会出现，因为 Ports 会根据当前系统的库版本进行编译。

## 课后习题

1. 配置 Node.js + Yarn 环境，使用国内镜像源创建一个简单的 Web 应用并测试运行。
2. 适配 Bun 包管理器。
