微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法下载 node-sqlite3@4.2.0 - node-pre-gyp 错误尝试下载403访问被拒绝 - node.js

如何解决无法下载 node-sqlite3@4.2.0 - node-pre-gyp 错误尝试下载403访问被拒绝 - node.js

我一直在尝试下载 sqlite3@4.2.0,但是它一直给我一个错误。以下是尝试运行 npm install 时的日志:

npm WARN deprecated node-pre-gyp@0.11.0: Please upgrade to @mapBox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapBox scoped package will recieve updates in the future

> sqlite3@4.2.0 install /Users/crypthusiast0/Dev/nodejs/auction-flipper/node_modules/sqlite3
> node-pre-gyp install --fallback-to-build

node-pre-gyp WARN Using needle for node-pre-gyp https download 
node-pre-gyp WARN Tried to download(403): https://mapBox-node-binary.s3.amazonaws.com/sqlite3/v4.2.0/node-v83-darwin-arm64.tar.gz 
node-pre-gyp WARN Pre-built binaries not found for sqlite3@4.2.0 and node@14.17.0 (node-v83 ABI,unkNown) (falling back to source compile with node-gyp) 
No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'.

No receipt for 'com.apple.pkg.DeveloperToolsCLILeo' found at '/'.

No receipt for 'com.apple.pkg.DeveloperToolsCLI' found at '/'.

gyp: No Xcode or CLT version detected!
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` Failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/Users/crypthusiast0/.nvm/versions/node/v14.17.0/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:351:16)
gyp ERR! stack     at ChildProcess.emit (events.js:376:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)
gyp ERR! System Darwin 20.4.0
gyp ERR! command "/Users/crypthusiast0/.nvm/versions/node/v14.17.0/bin/node" "/Users/crypthusiast0/.nvm/versions/node/v14.17.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "configure" "--fallback-to-build" "--module=/Users/crypthusiast0/Dev/nodejs/auction-flipper/node_modules/sqlite3/lib/binding/node-v83-darwin-arm64/node_sqlite3.node" "--module_name=node_sqlite3" "--module_path=/Users/crypthusiast0/Dev/nodejs/auction-flipper/node_modules/sqlite3/lib/binding/node-v83-darwin-arm64" "--napi_version=8" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v83"
gyp ERR! cwd /Users/crypthusiast0/Dev/nodejs/auction-flipper/node_modules/sqlite3
gyp ERR! node -v v14.17.0
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok 
node-pre-gyp ERR! build error 
node-pre-gyp ERR! stack Error: Failed to execute '/Users/crypthusiast0/.nvm/versions/node/v14.17.0/bin/node /Users/crypthusiast0/.nvm/versions/node/v14.17.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js configure --fallback-to-build --module=/Users/crypthusiast0/Dev/nodejs/auction-flipper/node_modules/sqlite3/lib/binding/node-v83-darwin-arm64/node_sqlite3.node --module_name=node_sqlite3 --module_path=/Users/crypthusiast0/Dev/nodejs/auction-flipper/node_modules/sqlite3/lib/binding/node-v83-darwin-arm64 --napi_version=8 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v83' (1)
node-pre-gyp ERR! stack     at ChildProcess.<anonymous> (/Users/crypthusiast0/Dev/nodejs/auction-flipper/node_modules/node-pre-gyp/lib/util/compile.js:83:29)
node-pre-gyp ERR! stack     at ChildProcess.emit (events.js:376:20)
node-pre-gyp ERR! stack     at maybeClose (internal/child_process.js:1055:16)
node-pre-gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:288:5)
node-pre-gyp ERR! System Darwin 20.4.0
node-pre-gyp ERR! command "/Users/crypthusiast0/.nvm/versions/node/v14.17.0/bin/node" "/Users/crypthusiast0/Dev/nodejs/auction-flipper/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build"
node-pre-gyp ERR! cwd /Users/crypthusiast0/Dev/nodejs/auction-flipper/node_modules/sqlite3
node-pre-gyp ERR! node -v v14.17.0
node-pre-gyp ERR! node-pre-gyp -v v0.11.0
node-pre-gyp ERR! not ok 
Failed to execute '/Users/crypthusiast0/.nvm/versions/node/v14.17.0/bin/node /Users/crypthusiast0/.nvm/versions/node/v14.17.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js configure --fallback-to-build --module=/Users/crypthusiast0/Dev/nodejs/auction-flipper/node_modules/sqlite3/lib/binding/node-v83-darwin-arm64/node_sqlite3.node --module_name=node_sqlite3 --module_path=/Users/crypthusiast0/Dev/nodejs/auction-flipper/node_modules/sqlite3/lib/binding/node-v83-darwin-arm64 --napi_version=8 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v83' (1)
npm WARN node-auction-flipper@0.1.0 No repository field.
npm WARN node-auction-flipper@0.1.0 license should be a valid SPDX license expression

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! sqlite3@4.2.0 install: `node - pre - gyp install--fallback - to - build`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the sqlite3@4.2.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/crypthusiast0/.npm/_logs/2021-06-10T21_46_58_721Z-debug.log

我回顾了日志,发现 https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v4.2.0/node-v83-darwin-arm64.tar.gz 可能是造成这种情况的主要原因,因为如果您确实访问了该链接,则会出现以下错误

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>Q0JKD48B1117QG62</RequestId>
<HostId>0tR6ildiySR62EjZI4DwfeVbxSFIOClQUiIyMCySpd/lficx42uEJ2YU94GtQQvMnF4EENuWH/0=</HostId>
</Error>

我不完全确定如何解决这个问题,因为我对 Node.js/NPM 和安装模块的经验不是很丰富,但是我确实需要 node-sqlite3 特别版本 4.2.0,因为我的一个VSCode 扩展依赖于它。我找到了 node-sqlite 的 github repo 和 4.2.0代码。有没有办法解决这个问题或从源代码编译模块?也许是因为我的节点版本/操作系统不支持它?我以前做过这个,所以我不确定。

我使用的是运行节点版本 v16.3.0 和 npm 版本 v7.16.0 的 MacBook Air M1 (ARM)。

解决方法

另一个答案对我来说没有帮助。此外,我发现简单地使用 yarn 而不是 npm 可以解决其他答案提到的问题。

然而,这个答案并没有解决主要问题:

node-pre-gyp WARN 尝试下载 (403):https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v4.2.0/node-*******.tar.gz

node-pre-gyp WARN 未找到预构建的二进制文件

TL;DR

对我来说,升级到 latest sqlite3(例如通过 yarn add sqlite3@^5)解决了这个问题。原因是:它可以很好地找到此版本的预构建二进制文件。

如果您(绝对)需要使用旧版本,则必须确保本地编译成功,如下所述。

除此之外,您还需要确保安装了最新版本的 node,因为通常情况下,过时的 Node 版本通常不提供预构建的二进制文件(检查 node -v;建议:使用 volta 来管理您的节点版本)。

警告:当然,那些预先构建的二进制文件也可能在不久的将来被软件包作者删除。希望他们至少会用更新的版本替换它们,而不仅仅是让它们完全离线。

说明

上面的错误消息表明 gyp 无法下载系统特定 预构建的二进制文件(这与 npm 软件包非常不同)。因为它找不到预先构建的二进制文件,它会尝试在本地编译它们,这总是很混乱,很容易出错。

  • 问:为什么找不到预建的二进制文件?

    • 答:预构建的二进制文件不是那么容易管理,因为您需要更多不同版本的它们,而不仅仅是它们所适用的 npm 包的版本。通常,您需要为每个主要版本的 npm 包 + 节点版本 + 操作系统 + instruction set architecture(例如 ARM 32 位与 x86 64 位等)。似乎出于某种原因,Mapbox 决定不长期存储这些预先构建的二进制文件。我确信它们过去存在过,但对于 4.2.0 版(可能还有许多其他版本),它们现在已经消失了。
    • 他们可能只保留其 npm 软件包的最新主要版本的所有这些不同的二进制文件,并擦除旧版本以节省存储空间。我没有找到有关该 on their repo 的任何文档。
  • 问:如果无法下载预构建的二进制文件会怎样?

    • A:事情变得非常混乱。它不是简单的下载,而是尝试在您的系统上编译它们,这涉及复杂的系统级依赖关系。例如:
      • 对于 OP,编译失败的原因是:

        gyp:未检测到 Xcode 或 CLT 版本!

      • 就我而言,它失败了,因为(在 Windows 上)我没有安装 VS 2017(也没有安装它的可再发行组件)。
    • 一般来说,本地编译首先需要 node-gyp 来配合,然后还需要 python 和系统特定的 C++ 编译器。如果你稍微谷歌一下,你会发现很多人成功(和失败)让这种本地编译工作的故事。可以针对本地编译,但获取预构建的二进制文件会使事情变得容易得多。
,

要修复错误,请尝试以下操作:

  • 清理 npm 缓存

    cli
  • 运行 npm install 看看它是否工作

     npm cache clean
    

而且由于您没有告诉我们您使用的是哪个版本的节点,可能与未使用正确版本的节点有关,它提到了 here npm install v4.2.0 可以使用:>

  • Node.js v4.x、v6.x、v8.x、v10.x、v11.x、v12.x 和 v13.x。

所以你可以考虑使用正确版本的nodejs


或者

如果您尝试从源代码手动安装 node-sqlite3。正如 npm docs 上提到的,这实际上是可能的。只要确保您下载的是 tarball 文件而不是 zip 文件,在您的情况下应该是这个 one

将 tarball 移动到它应该在的位置,然后简单地运行以下命令:

node-sqlite3

或者更简单:

npm install node-sqlite3-4.2.0.tar.gz

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。