prebuildify

prebuildify

优化原生模块预构建二进制文件的创建和打包工具

prebuildify 是一款专门用于创建和打包原生模块预构建二进制文件的工具。该工具将所有预构建二进制文件集成到发布到 npm 的包中,省去了额外的下载步骤。prebuildify 支持多平台和多运行时版本的预构建,并可与 node-gyp-build 协同工作,即便在禁用安装脚本的情况下也能保证正常运行。这一工具简化了原生模块的开发和分发流程,同时提升了安装效率和跨平台兼容性。

prebuildify预构建原生模块Node.jsnpmGithub开源项目

prebuildify

为原生模块创建和打包预构建

npm install -g prebuildify

使用 prebuildify,所有预构建的二进制文件都会打包在发布到 npm 的包中,这意味着不需要像 prebuild 那样单独下载。讽刺的是,这种方法下载所有平台的预构建二进制文件比作为安装脚本下载单个预构建二进制文件更快。

始终使用 prebuildify --@mafintosh

测试

使用方法

注意。 prebuildify@3 中的选项、环境变量和预构建名称已更改。请参阅以下文档。您还需要升级 node-gyp-build

首先,进入您的原生模块目录并创建一系列预构建。

# 进入您的原生模块目录 cd your-native-module # 为所有 electron/node 二进制版本构建并去除符号 prebuildify --all --strip # 预构建文件将存储在 ./prebuilds 目录 ls prebuilds

如果您的模块使用 node 核心 Node-API(以前称为 N-API),那么您可以使用 --napi 标志进行预构建:

# 使用 node-api 预构建 prebuildify --napi

现在剩下的唯一要做的就是让您的模块在存在预构建的情况下使用它。

使用 node-gyp-build 来实现这一点。

# 首先安装 node-gyp-build npm install --save node-gyp-build

然后将 node-gyp-build 作为安装脚本添加到您模块的 package.json 中:

{ "name": "your-native-module", "scripts": { "install": "node-gyp-build" } }

安装脚本会检查是否有兼容的预构建包。如果有,它不会执行任何操作。如果没有,它会运行 node-gyp rebuild 来生成构建。 这意味着即使用户禁用了安装脚本,只要有兼容的预构建包,您的模块仍然可以工作(!)。

index.js 中加载原生绑定时,您也应该使用 node-gyp-build 以确保获得正确的绑定

// 如果存在编译好的构建或预构建,将加载它。 // 如果没有找到构建,将抛出异常 var binding = require('node-gyp-build')(__dirname) module.exports = binding

这种方法的一个额外好处是,只要您为所有版本生成预构建,您的原生模块就可以在多个 node 和 electron 版本中工作,而无需用户重新安装或重新编译。使用 Node-API,您只需要为每个运行时生成预构建。

发布模块到 npm 时,记得包含 ./prebuilds 文件夹。

就是这样!祝您原生开发愉快。

选项

选项可以通过(按优先顺序)程序化 API、CLI 或环境变量提供。无论是否在外部定义,环境变量也可用于子进程。例如,prebuildify --arch arm64 --strip 设置 PREBUILD_ARCH=arm64 PREBUILD_STRIP=1

CLI环境默认值描述
--target -t-取决于具体情况。一个或多个目标*
--all -a-false构建所有已知目标。<br>优先于 --target
--napi-true进行 Node-API 构建。<br>目标默认为最新的 node,兼容 Electron > 3,可以用 --target 覆盖。注意:目前应避免使用 --all,因为它包括不支持 Node-API 的目标。
--electron-compat-false进行两个 Node-API 构建,一个用于 node,一个用于 Electron。如果您支持 Electron <= 3,这很有用。
--debug-false进行调试构建
--archPREBUILD_ARCHos.arch()目标架构**
--platformPREBUILD_PLATFORMos.platform()目标平台**
--uvPREBUILD_UV来自 process.versions.uv主要 libuv 版本***
--armvPREBUILD_ARMV在 ARM 机器上自动检测数字 ARM 版本(如 7)***
--libcPREBUILD_LIBCglibc,Alpine 上为 musllibc 类型***
--tag-uv-falseuv 标记预构建***
--tag-armv-falsearmv 标记预构建***
--tag-libc-falselibc 标记预构建***
--preinstall--构建前运行的命令
--postinstall--构建后运行的命令
--shellPREBUILD_SHELLAndroid 上为 'sh'用于生成命令的 shell
--artifacts--包含额外文件的目录。<br>递归复制到预构建目录中。
--stripPREBUILD_STRIPfalse启用 剥离
--strip-binPREBUILD_STRIP_BIN'strip'自定义剥离二进制文件
--node-gypPREBUILD_NODE_GYP'node-gyp(.cmd)'自定义 node-gyp 二进制文件****
--quiet-false抑制 node-gyp 输出
--cwd-process.cwd()工作目录

* 目标的形式为 (runtime@)?version,其中 runtime 默认为 'node'。例如:-t 8.14.0 -t electron@3.0.0。必须指定 --target--all--napi 中的至少一个。

** arch 选项作为 --arch 传递给 node-gyp。目标架构和平台(您正在为其构建)默认为主机平台和架构(您正在其上构建)。可以为交叉编译覆盖它们,在这种情况下,您可能还想覆盖剥离二进制文件。平台和架构决定了输出文件夹(供 node-gyp-build 在运行时查找)。例如,在 Linux x64 上,预构建文件最终位于 prebuilds/linux-x64 中。arch 选项也可以是由 + 分隔的多架构值(例如 x64+arm64 用于通用二进制文件),主要用于决定输出文件夹;只有第一个架构会传递给 node-gyp

*** 预构建文件的文件名由标签组成,默认包括运行时和 napiabi<version>。例如:electron.abi40.node。要创建更具体的预构建(供 node-gyp-build 选择),您可以添加额外的标签。这些标签的值是自动检测的。例如,如果主机机器具有 ARM 架构,--napi --tag-uv --tag-armv 可能会生成一个名为 node.napi.uv1.armv8.node 的构建。在交叉编译时,您可以通过相关选项(--tag-armv --armv 7)或标签(--tag-armv 7)作为快捷方式来覆盖值。它们是分开的,因为您可能想要构建特定版本而不将预构建标记为该版本,假设预构建是向前兼容的。

**** 启用使用分支如 nodejs-mobile-gyp

许可证

MIT

编辑推荐精选

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

下拉加载更多