如何使用 npm 安装 sqlite3 和 canvas 这些包

我目前的开发环境

在安装这些包的时候,用的是 win11 系统,Node 版本是 14.20.0

为什么安装 sqlite3, canvas 的时候经常出错

当我们使用 npm i xxx 命令来安装 Vue, React, lodash 这些普通 npm 包的时候,一般都会成功安装。因为这些包都是使用 JavaScript 来写的,安装的时候直接从 npm 源站点进行下载文件即可,无需在本地进行编译。

但当我们安装 sqlite3, canvas 这些原生 Node.js 包的时候,大多会遇到各种报错,比如:

  1. 缺少 Python, C++ 等环境
  2. 缺少 Visual Studio Build Tools
  3. 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,使用上面的命令也可以安装成功。

但是如果遇到了问题,可以参考我上面分享的思路:直接下载作者编译好的二进制文件,跳过本地编译的步骤。

相关推荐
故厶18 分钟前
webpack实战
前端·javascript·webpack
●VON19 分钟前
Electron 架构解剖:Chromium + Node.js 如何协同工作
架构·electron·node.js
_果果然23 分钟前
你真的懂递归吗?没那么复杂,但也没那么简单
前端·javascript
百***480728 分钟前
从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)
docker·容器·node.js
菜泡泡@1 小时前
仓库地图vue-grid-layout
前端·javascript·vue.js
2013编程爱好者5 小时前
Vue工程结构分析
前端·javascript·vue.js·typescript·前端框架
不羁的fang少年7 小时前
前端常见问题(vue,css,html,js等)
前端·javascript·css
change_fate7 小时前
el-menu折叠后文字下移
前端·javascript·vue.js
weixin_411191849 小时前
flutter中WebView的使用及JavaScript桥接的问题记录
javascript·flutter
百***06019 小时前
SpringMVC 请求参数接收
前端·javascript·算法