关于安装 sqlit3 报错或者安装缓慢问题

552 阅读1分钟

原因

报错内容

Command: node-pre-gyp install --fallback-to-build
Arguments: 
Directory: /usr/local/mirrors/node_modules/sqlite3
Output:
node-pre-gyp info it worked if it ends with ok
node-pre-gyp info using node-pre-gyp@0.11.0
node-pre-gyp info using node@14.18.2 | linux | x64
node-pre-gyp WARN Using needle for node-pre-gyp https download 
node-pre-gyp info check checked for "/usr/local/mirrors/node_modules/sqlite3/lib/binding/node-v83-linux-x64/node_sqlite3.node" (not found)
node-pre-gyp http GET https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v4.2.0/node-v83-linux-x64.tar.gz
node-pre-gyp http 403 https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v4.2.0/node-v83-linux-x64.tar.gz

主要是 sqlit3 在安装时回去远程下载编译好的安装包,但是下载地址在国内下载时会有网络问题,导致了下载失败。

关于 node-pre-gyp

node-pre-gyp 是一个nodejs的二进制包分发工具,就是说,当这个依赖包需要二进制的安装包时,会先调用 node-pre-gyp 从远程下载二进制包,要是没有的话,会调用 node-gyp 进行二进制编译。

node-pre-gyp需要开发者将各平台编译好的二进制包上传到网络上,并在package.json的binary字段指明二进制包的位置。然而,很多开发者选择将二进制包上传到aws上,导致国内无法正常下载(被墙)。幸好,可以在npm中设置--{module_name}_binary_host_mirror选项来指定二进制包的位置。

解决方案

在项目下面新建一个 .npmrc文件:

node_sqlite3_binary_host_mirror=https://registry.npmmirror.com/mirrors/

把下载地址指向国内镜像,这样就不会有远程下载问题了。