首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将node-gyp编译的模块配置为使用多个编译线程,如-j8?

node-gyp 是一个用于编译原生 Node.js 模块的工具。默认情况下,它使用单线程进行编译,但你可以通过设置环境变量或修改配置文件来启用多线程编译。

以下是几种方法来配置 node-gyp 使用多个编译线程,例如 -j8

方法一:使用环境变量

你可以在运行 node-gyp 命令时设置 MAKEFLAGS 环境变量来指定并行编译的线程数。

在 Unix 系统(如 Linux 和 macOS)上,你可以这样做:

代码语言:javascript
复制
MAKEFLAGS="-j8" node-gyp build

在 Windows 系统上,你可以这样做:

代码语言:javascript
复制
set MAKEFLAGS=-j8 && node-gyp build

方法二:使用 npm 脚本

如果你是通过 npm 脚本来调用 node-gyp,你可以在 package.json 中配置 scripts 部分:

代码语言:javascript
复制
{
  "scripts": {
    "build": "MAKEFLAGS='-j8' node-gyp build"
  }
}

然后你可以运行:

代码语言:javascript
复制
npm run build

方法三:修改 binding.gyp 文件

你也可以在 binding.gyp 文件中添加 xcode_settingsmsvs_settings 来指定并行编译的线程数,但这种方法不如前两种方法直接。

代码语言:javascript
复制
{
  "targets": [
    {
      "target_name": "your_module_name",
      "sources": [ "your_source_file.cc" ],
      "xcode_settings": {
        "OTHER_CFLAGS": [ "-j8" ]
      },
      "msvs_settings": {
        "VCCLCompilerTool": {
          "AdditionalOptions": [ "/MP8" ]
        }
      }
    }
  ]
}

请注意,这种方法可能需要根据你的编译器和平台进行调整。

方法四:全局配置

你可以在全局环境中设置 MAKEFLAGS,这样每次运行 node-gyp 都会使用多线程编译。

在 Unix 系统上,你可以将以下行添加到你的 shell 配置文件(如 .bashrc.zshrc)中:

代码语言:javascript
复制
export MAKEFLAGS="-j8"

在 Windows 系统上,你可以通过系统环境变量设置 MAKEFLAGS

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Node.js为什么需要C++扩展?

这些 C++扩展(xxx.node文件)也能像 JS 模块一样直接require使用,因为Node 模块加载机制提供了原生支持 P.S.所谓动态链接库,就是能在运行时动态加载库(.so文件,或者 Windows...,在编译预处理阶段会被展开成node-gyp命令传入模块名 P.S.宏展开可以理解字符串替换,具体见Macros 编译运行 在对 C++源码进行编译之前,先要有一份编译配置: { "targets...,放在项目根目录下(类似于package.json),供node-gyp编译使用 P.S.binding.gyp具体格式及各字段含义见Input Format Reference 先要安装node-gyp...上例直接使用了 Node、V8 提供 C++ API,可能存在跨版本兼容性问题(过几个版本可能就编译报错了),并且在不同版本 Node 环境下都需要重新编译,否则会产生运行时报错: $ node -...C++扩展来实现尤为合适: 计算密集型模块,C++执行性能一般要高于 JS 将现有的 C++类库低成本地封装成 Node.js 扩展,供 Node 生态使用 Node.js 提供原生能力无法满足需要

2.4K10

node-gyp是用Node.js编写跨平台命令行工具,用于Node.js编译本机插件

node-gyp - Node.js 本地插件构建工具 node-gyp是用Node.js编写跨平台命令行工具,用于Node.js编译本机插件。...如果你安装了多个Python版本,你可以用以下方式之一确定一个node-gyp可以使用Python版本 通过设置--python命令行选项,例如: node-gyp --python.../path/to/executable/python 如果用npm方式调用node-gyp,并且你安装了多个版本Python,那么你可以设置npm'python'配置适当值。...如何使用编译本地插件,首先转到它根目录: cd my_node_addon 下一步是当前平台生成合适项目构建文件。...binding.gyp文件 binding.gyp文件以类似于JSON格式描述了构建模块配置。这个文件和package.json都在包根目录下。

1.8K10

如何开发 Node.js Native Add-on?

不过因为这些同一个进程中 worker 线程是共享了同一个内存空间多个 add-on 实例必须考虑到多个 worker 线程同时存在可能性。...曾经 Node.js add-on 只能使用 node-gyp 来构建。...我们也已经发布了一个使用 CMake 构建 add-on 例子。 其他关于如何将 CMake.js 与 N-API add-on 一起使用详细信息可以在 N-API Resource 获取到。...这个编译过程需要本地安装有一个可以正常使用 C/C++ 工具链。而这个依赖通常会成为没有安装这些工具链 add-on 用户使用这个 add-on 一个阻碍。...大版本之后重新编译 add-on 模块; 我们可以在除了使用 V8 作为 JavaScript 引擎 Node.js 之外运行环境实现 N-API,也意味着这些 Node.js 开发 add-on

1.5K20

node-pre-gyp以及node-gyp源码简单解析(以安装sqlite3例)

然而,有些node模块直接或间接使用原生C/C++代码,这些东西要跨平台,就需要使用源码根据实际操作平台环境进行原生模块编译。...SQLite3就是一个经典原生模块,让我们以安装该模块例,探索一下安装原生模块流程。...然而,有些node模块直接或间接使用原生C/C++代码,这些东西要跨平台,就需要使用源码根据实际操作平台环境进行原生模块编译。...,最后打包一个原生node模块)。...解析编译二进制文件选项配置,譬如二进制文件存放地址,也就是通过请求下载对应二进制包地址,以及各种各样参数。所以说,为什么下载很慢,我们后文会重点关注下载地址。

91530

SWIG与nodejs入门

double Foo; 要构建Javascript模块,请使用 -javascript 选项和所希望目标引擎:-jsc,-v8或-node 运行SWIG。...版本号是一个16进制常量,但是常量被读作十进制数字对。 V8 3.25.30使用常量 0x032530。这种模式不能表达超过 99数字,但此常量仅在V8版本小于 4.3.0时才使用。...,因此,生成模块必须编译为C ++ 运行测试和例子 对于测试和例子配置当前仅支持 Linux和Mac,而不支持 MinGW(Windows)。...由于v8是用C ++编写,并且作为C ++库,因此使用与构建v8相同编译器标志来编译模块至关重要。为了简化操作,node.js提供了一个名为node-gyp构建工具。...你必须使用npm安装它: sudo npm install -g node-gyp node-gyp需要一个名为binding.gyp配置文件,该文件基本上是JSON格式,并且符合与Google构建工具

2K20

2020-6-5-如何编译electron依赖c++模块

而c++并没有这样vm环境,因此对于nodec++模块,需要先编译成平台相关代码,才能执行。...方案 这里我采用方式是node-gyp进行编译 整体方案如下所示,利用node-gyp,调用系统编译工具将源码编译成二进制文件。 之后node就可以调用对应二进制文件,调用模块方法。 ?...他会自动完成清理,重新编译过程。(如果有安装编译文件,则会直接使用) 不过值得注意是,这里默认会使用node作为runtime。...这里可以使用electron-rebuild - npm进行一键配置。...里面配置Rebuild脚本 "scripts": { "rebuild": "electron-rebuild" } 效果 最终你可以在浏览器通过require指定模块,查看编译是否成功。

2.6K21

Node.js 原生模块开发方式变迁

image.png node-gyp 这货是 Node.js 中编译原生模块。...它会识别包或者项目中 binding.gyp[5] 文件,然后根据该配置文件生成各系统下能进行编译项目, Windows 下生成 Visual Studio 项目文件(*.sln 等),Unix...在生成这些项目文件之后,node-gyp 还能调用各系统编译工具( GCC)来将项目进行编译,得到最后动态链接库 *.node 文件。...$ node-gyp configure:通过当前目录 binding.gyp 生成项目文件, Makefile 等; $ node-gyp build:将当前项目进行构建编译,前置操作必须先 configure...从暴力写码,到 NAN 出现,见证了 Node.js 社区各种爱恨情仇,一直到现在新生儿 N-API,原生 C++ 模块开发输送了新鲜血液。

1.2K30

node-gyp项目命名BUG

当我们编写node原生模块时候,免不了对node-gyp项目进行命名,在node-gyp进行build时候,会跟binding.gyp配置文件中target_name生成对应原生模块。...出现问题文件最后使用时候: NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize) 解决方案,target_name名称不使用中横线: target_name...编写样例 这里不再赘述样例,直接使用这篇文章建立一个demo:使用node-gyp编写简单node原生模块 - 知乎 (zhihu.com),或是使用node-gyp编写简单node原生模块 - w4ngzhen...build,会发现编译器报错: 使用IDE分析 我们曾经讲过,node-gyp实际上只是构建工具,他会根据各个操作平台,生成对应平台项目。...在VS中,我们进行进行如下配置,让编译器首先生成宏展开源码: 然后,我们重新进行编译,可以看到在对应生成目录下,产生了一个.i后缀文件。

18750

opencv cmake编译 && nodejs

,nodejs opencv使用了bin和lib目录,node-gyp编译js源码中可以看到相应环境变量和目录结构检测代码。...如果出现STDDEF.H找不到,说明VC环境变量未添加,需要运行VC环境下vcvarsall.bat,在使用NPM安装 如果node-gyp目录中build.js错误,需要配置环境变量GYP_MSVS_VERSION...configure显示编译C ++配置node- gyp 最终生成* .node 二进制文件,供nodejs调用 npm init项目创建package.json(项目依赖配置) 最终在窗户上还是编译错误...在C盘全局节点配置node-gyp中查到,node- gyp 使用3.6.1版本中v8.h和node.h使用VS2015或者更高版本,而我用VS2010,只支持C ++ 11标准,对于C...) 项目运行:node index.js运行js程 5.常用npm模块有(npm是nodejs包管理器,npm独立网站) npm可以方便发布自己模块使用开源模块,由于模块众多

2.5K20

编写原生 Node.js 模块

—— 来自Node.js官方文档 这意味着如果处理得当的话,模块调用者使用由C/C++编写原生模块方式和由Node.js编写模块一样。...创建Node.js原生扩展模块 下面我以一个常见动态规划问题-青蛙跳台阶例子来说明如何创建一个原生Node.js模块。...编译原生Node.js模块 一旦源代码编写完成,需要将它编译成二进制addon.node文件,之后才能被Node.js require。...为了完成编译操作,需要在项目的根目录创建binding.gyp文件,里面定义了Build配置。binding.gyp内容是一个JSON。...npm install时候会调用它来进行编译和安装工作。因此,开发者想要调用node-gyp必须自己安装一个全局node-gyp版本。

3.6K00

react-native环境搭建正确姿势

Node.js native addon build tool 我们使用npm安装有些module依赖一些用c/c++编写模块,这些模块需要本地编译安装;node-gyp就是一个编译工具...因为node-gyp编译需要node源码,第一次使用时候需要把它下载下来;但是官方源码源速度非常慢,基本下载不了;这样会导致编译某些模块时候卡住,我们可以使用国内镜像手动下载。...=http://registry.npm.taobao.org/ 配置git代理 不能访问外国网站还是不行;在安装模块时候,不仅需要下载模块,还需要下载node源代码;有的还是使用...> 这些配置完成,那么就可以初始化工程了;一句命令完成: react-native init AwesomeProject 安装完毕之后,可以使用npm ls看一下,这个工程依赖node模块是有多么复杂...实际上,我们使用很多npm包,用到了一些c/c++模块,需要编译安装。这个时候,需要依赖node源代码。但是,由于这个源本身问题,有了代理速度还是乌龟一般。

88410

Windows下node-gyp查找VS安装路径简单解析

配置过程,不会进行源码编译,仅仅是生成能够作为对应平台下对应编译工具输入项目结构。...因为绝大多数开发者就卡在这个步骤,导致安装需要原生编译node模块失败。...上图中,我模拟了node-gyp中查询VS2017以上版本函数,通过Debug方式断点调试: ps变量值:C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe...代码最后就是执行弄得chile_process模块execFile函数,通过传入可执行程序完整路径已经执行参数,完成外部程序调用。...而在这一步当中,如果执行出现了异常就会导致node-gyp执行过程出现异常,进而导致需要原生编译模块无法完成安装等。

64630

深入理解Android Build系统

如何将这些模块统一管理起来,如何能够在不同操作系统上进行编译,如何在编译时能够支持面向不同硬件设备,不同编译类型,且还要提供面向各个产商定制扩展,Android系统如何解决这些问题呢?...lunch 函数参数用来指定此次编译目标设备以及编译类型。 第三部命令“make -j8”才真正开始执行编译。...make 参数“-j”指定了同时编译 Job 数量,这是个整数,该值通常是编译主机 CPU 支持并发线程总数 1 倍或 2 倍(例如:在一个 4 核,每个核支持两个线程 CPU 上,可以使用...- LOCAL_CERTIFICATE:签署当前应用证书名称。 - LOCAL_MODULE_TAGS:当前模块所包含标签,一个模块可以包含多个标签。...标签是提供给编译类型使用,不同编译类型会安装包含不同标签模块编译类型说明: 名称 说明 eng 默认类型,该编译类型适用于开发阶段。

1.8K60

opencv集成opencv_contrib编译生成Android工程

接下来,我们还要创建如下两个文件:Android.mk 和 Applicatoin.mk (非必要) 创建Android.mk Android.mk文件用来指定源码编译配置信息,例如工作目录,编译模块名称...LOCAL_SRC_FILES:用来指定参与模块编译C/C++源文件名。 BUILD_SHARED_LIBRARY:作用是指定生成静态库或者共享库在运行时依赖共享库模块列表。...创建Application.mk 这个文件用来配置编译平台相关内容,我们最常用估计只是APP_ABI字段,它用来指定我们需要基于哪些CPU架构.so文件,当然你可以配置多个平台: APP_ABI :...假设我们配置好了Android.mk文件,那么接下来我们就可以执行如下命令来生成.so文件了,我们假设开发NDK目录默认目录: cdsrc/main/jni/ndk-build 如果顺利,那么你将会看到...Studio中通过CMake使用NDK并编译自定义库和添加预编译库 介绍了用CMake构建方法,用版本和库比较新 到了这一步,应该都能成功配置出NDK环境并在上面使用opencv接口

2.4K10

零基础开发 Node.js Addons 插件:Hello Node-API

不同版本 Node.js 只要遵循 应用二进制接口(ABI) 版本是一致或向前兼容,即可在多个 Node.js 版本之间切换使用。...通俗讲:“当你在 Node.js v12 编译之后模块切换到 Node.js 14 无需重新编译仍可运行”。...模块注册也就是将我们写方法以模块形式导出,如果使用 JavaScript 表示如下所示: module.exports = { getNApiInfo, }; Node-API 使用了自己宏定义...上面我们已经使用 Node-API 基于 C 语法实现了一个插件,要想在 Node.js 中引用,我们还需要编译,有两个可选编译工具 node-gyp 和 cmake-js[6]。...本文我们使用 node-gyp,可以通过 npm 全局安装 npm i node-gyp -g。

2.4K30

使用云函数自定义运行时部署php8.0并访问pgsql

通过开放实现自定义函数运行时,支持根据需求使用任意开发语言任意版本来编写函数,并实现函数调用中全局操作,扩展程序加载,安全插件,监控 agent 等。...pgsql支持编译到框架内部,后续不再需要通过php.ini里面指定插件来使用pgsql。...make -j8 是因为笔者使用编译设备是8核心设备,启动8线程编译可以对编译速度有所提升,建议实际编译时候这里属性根据自己设备核心数来合理配置。...[scf2.png] 最后打开高级配置并绑定层,可以点击添加层来添加多个层绑定,点击完成,等待scf函数生成。...[scf4.png] 修改一下index.php中pgsql连接字符配置自己pgsql配置,然后运行测试函数,可以看到函数正常运行和返回。

2K81
领券