首页
学习
活动
专区
工具
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都在包的根目录下。

3.1K10
  • 如何开发 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.6K20

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

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

    1.1K30

    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.3K30

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

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

    2.6K21

    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后缀的文件。

    20550

    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

    编写原生 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.8K00

    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

    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的源代码。但是,由于这个源本身的问题,有了代理速度还是乌龟一般。

    89610

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

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

    73030

    深入理解Android Build系统

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

    2K60

    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.5K10

    零基础开发 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.8K30

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

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

    2K81
    领券