如何防止node-gyp从internet下载node-headers.tar.gz和node.lib?

Vol*_*lyy 11 node.js npm node-gyp

node-gyp在安装和构建本机模块(如iconv,ref,ffi等)时从Internet下载以下文件:
https://nodejs.org/download/release/v6.10.0/node-v6.10.0-headers. tar.gz
https://nodejs.org/download/release/v6.10.0/win-x86/node.lib
https://nodejs.org/download/release/v6.10.0/win-x64/node.lib
https ://nodejs.org/download/release/v6.10.0/SHASUMS256.txt

如何让node-gyp从本地文件夹而不是从Internet使用这些文件?

我找到了以下解决方案:
1.下载https://nodejs.org/download/release/v6.10.0/node-v6.10.0-headers.tar.gz
2.将其解压缩到某个本地文件夹.
3.在此本地文件夹中创建文件夹发布.
4.将文件https://nodejs.org/dist/v6.10.0/win-x64/node.lib下载到文件夹Release中.
5.在.npmrc中设置属性nodedir,它将指向包含解压缩标头的文件夹:
nodedir = D:\ tools \node_src \node-v6.10.0-headers

现在npm安装包和node-gyp构建本机包,而无需从Internet下载节点头和库.
这是一种正确的方法吗?

我在文档中找不到我应该下载node.lib并将其放到Release目录中.
在分析了node-gyp的跟踪和node-gyp的代码后,我决定这样做.
是否可以使用一些npm_config_xxx属性设置node.lib的位置?

Pat*_*ari 12

对于那些在Windows上运行的人来说,where--tarball是无用的,因为node-gyp随后想要下载node.lib文件......

这是我的解决方案,希望能帮助其他陷入公司障碍的人。我使用 v16.2.0 作为示例,因此请更换为合适的节点版本。

创建一个您愿意存放 16.2.0 数据的文件夹,并使用终端命令指向它。我选择了%USERPROFILE%\.node-gyp\16.2.0。不一定要在.node-gyp.

在该文件夹中创建两个子文件夹:Releasesrc

下载: https: //nodejs.org/download/release/v16.2.0/win-x64/node.libhttps://nodejs.org/download/release/v16.2.0/node-v16.2.0-headers。压缩包

放入子文件夹node.libRelease

打开 headers.tar.gz 文件。我用的是7zip。进入 tar 后,导航到 include/node。

将这两个.gypi文件提取到您的基本文件夹中。

将其他所有内容提取到src子文件夹中。

使用--nodedir=%USERPROFILE%\.node-gyp\16.2.0(或您的等效文件夹,如果您与我不同)运行


use*_*934 5

以下对我有用:

# download for private repo, probably you're behind firewall
curl -k -o node-v8.9.4-headers.tar.gz -L https://nexus.com/repository/binaries/node/v8.9.4/node-v8.9.4-headers.tar.gz

# capture the absolute path
TARBALL_PATH=$(pwd)

# configure tarball in npm config
npm config set tarball ${TARBALL_PATH}/node-v8.9.4-headers.tar.gz

# The below command should pass without gyp error
npm install
Run Code Online (Sandbox Code Playgroud)


小智 4

正如这里所建议的,您可以使用 node-gyp 的 --tarball 选项 https://github.com/nodejs/node-gyp/issues/1133

  • 这在 Windows 上不起作用,其中 --tarball 选项不加载“node.lib”文件,仅加载标头 (3认同)