我目前的开发环境
在安装这些包的时候,用的是 win11 系统,Node 版本是 14.20.0
为什么安装 sqlite3, canvas 的时候经常出错
当我们使用 npm i xxx 命令来安装 Vue, React, lodash 这些普通 npm 包的时候,一般都会成功安装。因为这些包都是使用 JavaScript 来写的,安装的时候直接从 npm 源站点进行下载文件即可,无需在本地进行编译。
但当我们安装 sqlite3, canvas 这些原生 Node.js 包的时候,大多会遇到各种报错,比如:
- 缺少 Python, C++ 等环境
- 缺少 Visual Studio Build Tools
- Permission denied,缺少管理员权限
之所以会出现这些报错,是因为作者开发这些原生 Node.js 包的时候,不仅使用了 JavaScript 代码,还用到了 C++ 代码。我们在安装的时候,需要把这些 JavaScript 和 C++ 源代码下载到本地,然后调用本地的环境进行编译,得到能够使用的依赖包。
但是作为一名 JavaScript 开发者,我们本地一般都会缺少编译所需的环境,所以在编译的时候,大多数都会失败。
如何正确安装 sqlite3, canvas 这些原生包
sqlites3, canvas 这些包的作者在发布这些包的时候,不仅发布了源代码,还发布了不同环境下编译好的二进制文件,如果我们本地无法进行编译,可以直接下载作者编译好的这些二进制文件。

但是在国内不太方便访问 GitHub 网站,从这些站点下载二进制文件的时候大多会出错,我们可以从国内镜像网站进行下载,你可以点进链接查看有没有你需要下载的包。
然后关键点来了,我们在安装包的时候,需要添加一些配置,来指定从国内镜像网站进行下载二进制文件。安装 sqlite3 的时候,使用这样的命令:
bash
# 安装最新版本的 sqlite3
npm i sqlite3 --node_sqlite3_binary_host_mirror=https://npmmirror.com/mirrors/sqlite3
# 安装指定版本的 sqlite3,需要注意:
# 安装 5.0.2 及更早的版本,使用下面的源
npm i sqlite3@5.0.2 --node_sqlite3_binary_host_mirror=https://npmmirror.com/mirrors
# 安装 5.0.3 及更新的版本,使用下面的源
npm i sqlite3@5.0.3 --node_sqlite3_binary_host_mirror=https://npmmirror.com/mirrors/sqlite3

如果要安装 canvas 也是类似的命令,但是要把 node_sqlite3_binary_host_mirror 换成 canvas_binary_host_mirror
bash
npm i canvas --canvas_binary_host_mirror=https://npmmirror.com/mirrors/canvas

写在后面
如上图所示,我在安装这些包的时候,用的是 win11 系统,Node 版本是 14.20.0。如果你用的是其他系统或者其他版本的 Node,使用上面的命令也可以安装成功。
但是如果遇到了问题,可以参考我上面分享的思路:直接下载作者编译好的二进制文件,跳过本地编译的步骤。