如何使用 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,使用上面的命令也可以安装成功。

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

相关推荐
xixixin_2 小时前
【React】为什么移除事件要写在useEffect的return里面?
前端·javascript·react.js
嘗_2 小时前
react 源码2
前端·javascript·react.js
Mr.Jessy7 小时前
Web APIs学习第一天:获取 DOM 对象
开发语言·前端·javascript·学习·html
午安~婉7 小时前
javaScript八股问题
开发语言·javascript·原型模式
西西学代码8 小时前
Flutter---个人信息(5)---持久化存储
java·javascript·flutter
芝麻开门-新起点8 小时前
flutter 生命周期管理:从 Widget 到 State 的完整解析
开发语言·javascript·ecmascript
ConardLi9 小时前
Easy Dataset 已经突破 11.5K Star,这次又带来多项功能更新!
前端·javascript·后端
冴羽9 小时前
10 个被严重低估的 JS 特性,直接少写 500 行代码
前端·javascript·性能优化
一 乐9 小时前
高校后勤报修系统|物业管理|基于SprinBoot+vue的高校后勤报修系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·毕设
那年窗外下的雪.10 小时前
鸿蒙ArkUI布局与样式进阶(十五)—— 模块化 · 自定义组件 · 泛型机制深度解析
javascript·华为·typescript·harmonyos·鸿蒙·arkui