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

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

node-gyp - Node.js 本地插件构建工具 node-gyp是用Node.js编写跨平台命令行工具,用于Node.js编译本机插件。...它包含gyp-next项目的供应商副本,该副本以前由Chromium团队使用,已扩展用来支持Node.js本机插件开发。 请注意,node-gyp并不用于构建Node.js本身。...以本地 ARM 上 Windows 10 上 ARM64 Node.js 目标,请添加“ARM64Visuall C++ 编译器和”和“ARM64 Visual C++ ATL”组件。...如何使用 要编译本地插件,首先转到它根目录: cd my_node_addon 下一步是当前平台生成合适项目构建文件。... 响应以下命令: help 显示帮助日志 build 调用make/msbuild.exe并且构建本地插件 clean 删除build目录,如果存在 configure 当前平台生成项目构建文件 rebuild

1.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

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

个别情况,开发者只能得到一个静态连接或者动态链接以及一堆 C++ 头文件,其余都是黑盒,这种情况就不得不使用 C++ 进行模块开发了。...在生成这些项目文件之后,node-gyp 还能调用各系统编译工具(如 GCC)来将项目进行编译,得到最后动态链接 *.node 文件。...; $ node-gyp clean:清理生成构建文件以及输出目录,说白了就是把目录清理了; $ node-gyp rebuild:相当于依次执行了 clean、configure 和 build...小结 本次内容主要讲解了在 Node.js 领域中原生 C++ 模块开发方式变迁。 从 node-waf 到 node-gyp,这是构建工具一个变迁,未来说不定会是 GN 或者其它构建工具。...从暴力写码,到 NAN 出现,见证了 Node.js 社区各种爱恨情仇,一直到现在新生儿 N-API,原生 C++ 模块开发输送了新鲜血液。

1.2K30

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

这些 C++扩展(xxx.node文件)也能像 JS 模块一样直接require使用,因为Node 模块加载机制提供了原生支持 P.S.所谓动态链接,就是能在运行时动态加载(.so文件,或者 Windows...类 Node 依赖:Node.js 依赖一些静态链接C++扩展也可以使用,例如 OpenSSL(更多依赖,见node/deps/) P.S.关于 Node.js 源码依赖、运行机制更多信息...,在编译前预处理阶段会被展开成node-gyp命令传入模块名 P.S.宏展开可以理解字符串替换,具体见Macros 编译运行 在对 C++源码进行编译之前,先要有一份编译配置: { "targets...,也可以npm install node-gyp将其安装到当前项目,并通过npx node-gyp调用 接着通过node-gyp configure命令,生成当前平台构建过程所需配置文件(Unix 系统下生成...C++扩展来实现尤为合适: 计算密集型模块,C++执行性能一般要高于 JS 将现有的 C++低成本地封装成 Node.js 扩展,供 Node 生态使用 Node.js 提供原生能力无法满足需要

2.4K10

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

然而,有些node模块直接或间接使用原生C/C++代码,这些东西要跨平台,就需要使用源码根据实际操作平台环境进行原生模块编译。...重点在于,它是一套用于生成原生IDE项目文件自动化构建工具,处理C/C++项目,同类型有CMake、ninja等自动构建工具。 什么是node-gyp?...然而,有些node模块直接或间接使用原生C/C++代码,这些东西要跨平台,就需要使用源码根据实际操作平台环境进行原生模块编译。...那么我们需要下载源码文件,通过node-gyp生成一定结构代码项目让我们能够require引入(譬如,Windows下会生成vcxproj,再调用MSBuild进行编译,以生成Windows下动态链接...),进入第2步; 下载原生模块源码,然后使用node-gyp进行项目构建,得到与平台相关源码项目文件(Windows则生成vcxproj项目,Linux下是Makefile);在这个过程,node-gyp

86130

electron-builder进行DEBUG输出正确方式

本地node与electron内部node 在对Electron进行打包时候,需要对当前Electron项目中使用node原生C/C++模块进行额外平台编译,这个过程被称为rebuild。...实际上,install-app-deps内部依然使用node-gyp相关知识,关于这一块知识,读者可以翻阅我之前文章《node-pre-gyp以及node-gyp源码简单解析(以安装sqlite3...本文着重介绍electron-builder如何进行debug打印,好知道打包过程中发生了什么。 首先我们准备在项目中,安装一个需要根据平台原生编译npm包:images。...is doing: 设置DEBUG环境变量值字符串electron-builder: DEBUG=electron-builder FPM_DEBUG 环境变量,将会显示更多关于构建Linux平台程序细节...就像如下方式: "installappdeps": "electron-builder install-app-deps --verbose" 不幸是,虽然--verbose能被node-gyp识别

48850

如何写一个简单node.js c++扩展

如何写一个简单node.js c++扩展 node 是由 c++ 编写,核心 node 模块也都是由 c++ 代码来实现,所以同样 node 也开放了让使用者编写 c++ 扩展来实现一些操作窗口...: > npm i -g node-gyp # 生成构建文件 > node-gyp configure # 构建 > node-gyp build 这时候你会发现项目目录下已经生成了一个名为 add.node...: 如何c++ 函数返回一个函数供 JS 调用 如何让返回值既支持函数调用又支持取值操作 如何处理非固定数量参数(其实这个很简单了,从上边也能看出来,本身就是一个数组) 不再赘述 binding.gyp...: 如何c++ 函数返回一个函数供 JS 调用 通过 Napi::Function::New 创建新函数,并将计算结果存入函数可以获取到地方供下次使用 如何让返回值既支持函数调用又支持取值操作...后记 上边一些内容就是如何使用 node-addon-api 来快速开发一个 c++ 扩展,以及如何使用 node-gyp 进行编译,还有最后的如何使用 JS 调用 c++ 扩展。

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...,需要一定C/C++知识。...编写样例 这里不再赘述样例,直接使用这篇文章建立一个demo:使用node-gyp编写简单node原生模块 - 知乎 (zhihu.com),或是使用node-gyp编写简单node原生模块 - w4ngzhen...build,会发现编译器报错: 使用IDE分析 我们曾经讲过,node-gyp实际上只是构建工具,他会根据各个操作平台,生成对应平台项目。

18150

Electron9.x +vue+ffi-napi 调用Dll动态链接

本文主要介绍在 Electron9.x 使用ffi-napi,ref-array-napi,ref-napi 加载 Windows 动态链接,并在Vue 渲染进程中使用。...参数指向数组指针 A比较简单,而B和C 涉及到 参数指针情况,函数内部可以修改指针指向内存,函数运行完毕之后,外部内存值将会被修改。...,只从仓库中下载了源代码,并没有自动执行编译,需要手工执行编译,先执行 node-gyp configure npm i -S ref-napi cd node_modules\ref-napi\ node-gyp...ffi内置类型简写类型 addPtr: ['void', ['int', 'int', 'int*']], // IntArray 是上面通过 ArrayType 构建出来类型 initArray...方法名一致 C语言数据类型是通过 ref-napi 来映射,详细映射可以查看以下文档: 官方文档1 官方文档2 官方文档3 参考资料: node-ffi使用指南 Node.js 调用C++

4.5K30

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

这里需要再次提到node-gyp处理过程,主要分为两个步骤: configure gyp首先根据C/C++源码目录下binding.gyp文件+操作系统(Windows、macOS以及Linux)+...编译构建工具(Windows下VS,macOS以及Linux下make)来决定生成什么样项目结构(Windows下sln以及vcxproj、macOS以及Linux下make项目)这一步是configure...build 生成项目结构以后,执行build过程调用对应编译工具完成编译任务。 所以,我们首先查看lib/configure.js文件,试着从源码探索一下。...上图中,我模拟了node-gyp查询VS2017以上版本函数,通过Debug方式断点调试: ps变量值:C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe...而在这一步当中,如果执行出现了异常就会导致node-gyp执行过程出现异常,进而导致需要原生编译模块无法完成安装等。

59430

有个机会来了!!!STEAM

征得 Danilo 同意之后,我们将他解决方案翻译整理成本文。如何游戏是采用 Cocos Creator 开发制作并希望发布桌面应用,这篇文章将给予你帮助。...---- 1 了解 Node.js Node.js 是一个功能强大工具,通过使用 JavaScript 作为通用语言部署到许多原生平台,可以开发多种类型应用程序和其他工具。...我们需要一个名为 node-gyp node.js 构建工具。...首先,通过运行以下命令全局安装 node-gyp: npm install node-gyp -g 然后,通过在 Greenworks 项目的根目录运行以下命令来构建 Greenworks: node-gyp...我发现更简单方法是通过编辑构建项目时由 Cocos 生成结果HTML(在 cocosExport 文件夹 index.html),将以下内容添加到输出 HTML,在 tag之前。

2.5K21

SWIG与nodejs入门

$ swig -javascript -jsc example.i 如果构建C ++扩展,请添加-c ++选项: $ swig -c++ -javascript -jsc example.i SWIG生成...产生 C 源文件包括许多需要被编译底层wapper并与剩下C/C++应用链接到一起生成一个扩展模块。 wraper文件名子来自于输入文件。...由于v8是用C ++编写,并且作为C ++,因此使用构建v8相同编译器标志来编译模块至关重要。为了简化操作,node.js提供了一个名为node-gyp构建工具。...你必须使用npm安装它: sudo npm install -g node-gyp node-gyp需要一个名为binding.gyp配置文件,该文件基本上是JSON格式,并且符合与Google构建工具...要使用扩展程序,您需要在Javascript源文件“require”它: require("./build/Release/example") 在例子部分给出了更详细解释。

1.9K20

深入浅出 Nodejs( 三 ):Nodejs 核心模块机制

在引入JavaScript核心模块过程,也经历头尾包装过程,然后执行和导出exports对象。与文件模块有区别的地方在于:获取源代码方式(核心模块从内存加载),以及缓存执行结果位置。...作为Node使用者,尽管几乎没有机会参与核心模块开发,但是了解如何开发核心模块有助于我们更加深入地了解Node。下面我们以C/C++模块例演示如何编写内建模块。...在开始编写扩展模块之前,需要强调一点是,Node原生模块一定程度上是跨平台,其前提条件是源代码可以支持在window和nix上编译,其中windows需要通过Visual C++编译器编译为动态链接文件...1.3.2 C/C++扩展模块编译 在GYP工具帮助下,C/C++扩展模块编译很容易,无须每个平台编写不同项目编译文件。...三、包与NPM Node组织了自身核心模块,也使得第三方文件模块可以有序地编写和使用。但是在第三方模块,模块与模块仍然是散列在各地,相互之间不能直接引用。

2.2K00

零基础开发 Node.js Addons 插件:实现一个跨平台 sleep 函数

通过前两节已知道怎么去写一个简单 Node.js Addons 插件,包括接收参数、类型转换等,之前插件编译我们只考虑了一个平台,但是实际我们调用 C/C++ 一些函数,有可能会涉及到不同平台...,但也可以借助 C/C++ 里面提供一些函数来 Node.js 实现一个 sleep 函数,也可以选择在工作线程中使用。...,这里重点就是对函数 os_usleep() 声明,通常在 C/C++ 程序建议把所有的常量、宏、函数原型写在头文件,实现是在引入该头文件地方,后续当我们需要掉用一些函数,只要引用这个头文件即可...node-gyp configure build 测试 和第一讲方式一样,创建 app.js 文件,引入我们编译之后 .node 文件,因为我们在 C 里面实现时单位微秒,所以要在转换下。...C 源码部分,通常必须要求用户本地也有一个能够编译 C/C++ 代码环境,例如我们使用 node-gyp 工具在 Linux 系统要安装 Python、GCC,Windows 系统同样也要安装相应构建环境

2.2K30

前端-结合源码分析 Node.js 模块加载与运行原理

_source,所以在 getSource 方法,直接可以使用模块名作为索引,从数组取出模块源代码。...实际上最终调用了 DLOpen 函数,该函数中最重要使用 uv_dlopen 方法打开动态链接,然后对 C/C++ 模块进行加载。uv_dlopen 方法是定义在 libuv 。...为了编译这个模块,我们需要通过npm安装 node-gyp 编译工具。该工具将 Google gyp 工具封装,用来构建 Node.js 扩展。...在这个过程node-gyp 还会去指定目录(一般是 ~/.node-gyp)下面搜我们当前 Node.js 版本一些头文件和文件,如果不存在,它还会帮我们去 Node.js 官网下载。...值得注意是,不同 Node.js 版本,依赖 v8 版本不同,导致很多 API 会有差别,因此使用原生 C/C++ 开发扩展过程,也需要针对不同版本 Node.js 做兼容处理。

2.2K20

结合源码分析 Node.js 模块加载与运行原理

_source,所以在 getSource 方法,直接可以使用模块名作为索引,从数组取出模块源代码。...实际上最终调用了 DLOpen 函数,该函数中最重要使用 uv_dlopen 方法打开动态链接,然后对 C/C++ 模块进行加载。uv_dlopen 方法是定义在 libuv 。...为了编译这个模块,我们需要通过npm安装 node-gyp 编译工具。该工具将 Google gyp 工具封装,用来构建 Node.js 扩展。...在这个过程node-gyp 还会去指定目录(一般是 ~/.node-gyp)下面搜我们当前 Node.js 版本一些头文件和文件,如果不存在,它还会帮我们去 Node.js 官网下载。...值得注意是,不同 Node.js 版本,依赖 v8 版本不同,导致很多 API 会有差别,因此使用原生 C/C++ 开发扩展过程,也需要针对不同版本 Node.js 做兼容处理。

3.2K10

opencv cmake编译 && nodejs

1.cmake编辑opencv源代码路径(带有makelist目录),生成opencv相关lib文件.configure两次后,点击生成(cmake中选择安装以依赖,...2.添加opencv包括目录到项目进行vc开发,如果要在nodejs中使用opencv,在编译构建完项目后出现如图项目: ? 编译运行vc10,生成bin文件夹和lib文件。...,nodejs opencv使用了bin和lib目录,node-gyp编译js源码可以看到相应环境变量和目录结构检测代码。...在C盘全局节点配置node-gyp查到,node- gyp 使用3.6.1版本v8.h和node.h使用VS2015或者更高版本,而我用VS2010,只支持C ++ 11标准,对于C...++ 14和17都不支持,CL编译起有差别导致编译错误解决办法:下载NodeJS开源代码老本本支持VS2010,节点-GYP构建vcproject后,手动添加NodeJS包括生成节点文件。

2.5K20

Electron问题解决小集合

官网FAQ: https://electronjs.org/docs/faq 二进制文件在asar包无法访问: 构建时需要在package.json文件写上"asar":false,原因是electron...打包之后如何查看main进程日志: 可以通过/Applications/DingTalk\ Develper\ Tools.app/Contents/MacOS/DingTalk\ Develper...如何打包: 使用electron-builder或electron-packager,一般都有两种方式,全局或局部。全局的话就按照正常Node.js全局模块安装即可,局部稍微写两行代码。...编译C++问题: 如果需要指定编译C++模块,那么可以使用node-gyp rebuild --target=1.7.6 --arch=x64 --dist-url=https://atom.io/download...如果你使用React,基本上就像开发Web应用一样,没有什么多少其他问题存在,最多是注意打包路径问题。

2.4K20

Rust + Android 集成开发设计

与任何大型项目一样,引入一种新语言需要仔细考虑。对于 Android 来说,重要问题是:评估如何将 Rust 最佳地融入到 Android 构建系统。...Soong 已经提供了一种构建 C 语言,并将其定义依赖项机制。而 Android 谨慎地控制编译器版本和全局编译标记,以确保是以特定方式构建。...通常用于设置生成环境,或者使用其它语言构建(例如 C/C++),类似于配置使用其它语言脚本。 避开 build.rs 脚本,从某种程度上说,也是不依赖于 Cargo。...C/C++ 模块可以依赖于 Rust cdylib 或者 staticlib 生成,它们与 C/C++ 方式相同。...支持基于源代码代码覆盖构建,以向平台开发人员提供测试。 在不久将来,我们计划在站点 source.android.com 上添加文档,说明如何在 Soong 定义和使用 Rust 模块。

2.1K10

UnityUnreal 插件集成iOSAndroid 血泪总结

Unity 插件集成原生安卓 aar 包和 iOS 动态Unity 插件开发,对比 UE 插件开发,要简单不少。...使用 extern "C" 语法可以确保函数具有 C 链接约定,从而可以从 C++ 代码(由 IL2CPP 生成调用它们。...点击运行,可以看到控制台正常输出了我们自定义 Log:UE4 插件集成原生安卓 jar 包和 iOS 动态打包成 UE Plugin 之后,调用原生功能方式会简单很多,可以极大提高 SDK 接入效率...GameActivity.java 文件,该文件是 Unreal Android 应用生成主活动文件。...res 目录添加一个新资源(例如,一个新布局 XML 文件、图片、字符串资源等),Android 构建系统会在 R 类该资源生成一个新静态字段。

2K51
领券