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

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

相关推荐
前端 贾公子31 分钟前
Eruda:移动端网页调试利器
前端·javascript·vue.js
Hashan40 分钟前
Elpis:抽离业务代码,发布NPM包
前端·javascript·vue.js
用户47949283569151 小时前
0.1加0.2为什么不等于0.3-答不上来的都挂了
前端·javascript·面试
rit84324991 小时前
C#实现的远程控制系统
前端·javascript·c#
南山安1 小时前
React学习:Vite+React 基础架构分析
javascript·react.js·面试
JS_GGbond1 小时前
JavaScript事件循环:餐厅里的“宏任务”与“微任务”
开发语言·javascript·ecmascript
CodeCraft Studio1 小时前
JavaScript图表库 DHTMLX Diagram 6.1 重磅发布:全新PERT模式上线,项目可视化能力再升级!
开发语言·javascript·ecmascript·dhtmlx·图表开发·diagram·javascript图表库
shuaijie05182 小时前
当表格数据量过大的时候,如何使用不分页进行展示
javascript·vue.js·ecmascript
行走的陀螺仪2 小时前
Vite & Webpack 插件/Loader 封装完全指南
前端·webpack·node.js·vite·前端工程化·打包构建
How_doyou_do2 小时前
常见的设计模式
前端·javascript·设计模式