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

标签 node.js npm node-gyp

node-gyp在安装和构建iconv、ref、ffi等原生模块时从互联网下载以下文件:
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.在这个本地文件夹中创建文件夹Release。
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 头和库。
这是一个正确的方法吗?

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

最佳答案

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

这是我的解决方案,希望能帮助其他陷入公司障碍的人。我以 v16.2.0 为例,请换成你合适的 Node 版本。

创建一个您乐于存放 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.tar.gz

node.lib 放在 Release 子文件夹中。

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

将两个 .gypi 文件解压到您的基本文件夹中。

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

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

关于node.js - 如何防止 node-gyp 从 Internet 下载 node-headers.tar.gz 和 node.lib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42722457/

相关文章:

javascript - Node.js ES6 如何从模块中导出类?

javascript - 过滤2个数组

javascript - 如何通过sequelize postgres数据库和迁移在服务器重启后幸存下来

node.js - 什么是 Node gyp?

node.js - 如何在 npm install 中使用预安装的二进制文件(zeromq)而不是使用 node-gyp 工具构建?

javascript - 转换javascript日期时区的正确方法

javascript - 在带有 Babel 的 Node 脚本中使用 ES6 语法

javascript - 如何在本地构建和使用 xterm.js?

node.js - 如何在Docker容器中运行npm命令?

node.js - 错误 bcrypt@0.8.3 安装脚本失败 'node-gyp rebuild'