如何在Perry中原生编译npm包:fastify、mysql2等50+流行库免Node运行实战
如何在Perry中原生编译npm包fastify、mysql2等50流行库免Node运行实战【免费下载链接】perryA native TypeScript/JavaScript compiler written in Rust. Compiles TypeScript/JavaScript directly to executables using SWC and LLVM.项目地址: https://gitcode.com/gh_mirrors/perry2/perryPerry 是一个用 Rust 编写的 TypeScript/JavaScript原生编译器能把 npm 流行包fastify、mysql2、pg、ioredis、bcrypt 等 50 库直接原生编译成独立可执行文件——用 SWC 解析源码、LLM 生成机器码服务器上没有 Node.js、没有 node_modules只有一个自包含的二进制文件。 为什么选择 Perry 编译 npm 包传统上写 TypeScript/JavaScript 服务端意味着交付一个 JS 引擎每台服务器装 Node或把 ~100 MB 的运行时打进每个 CLI。Perry 直接去掉引擎本身Perry 原生编译传统 Node.js交付物一个原生二进制hello world 仅 ~330 KB代码 Node 运行时执行方式提前编译AOT机器码JIT 解释 预热冷启动瞬时引擎启动 预热部署单文件无需 Node 环境需安装 Node项目入口介绍见 README.md。 npm 包原生编译的三条路径Perry 处理一个import fastify from fastify时按优先级依次尝试三条路径详见 docs/src/native-libraries/overview.md外部原生绑定node_modules中带perry.nativeLibrary字段的包直接链接预构建的静态库compilePackages源码编译把纯 TypeScript/JavaScript 包从上游源码编译成原生代码知名绑定表well-known tablePerry 自带 50 流行包的原生实现零配置——你什么都没装编译器直接识别。映射表位于 crates/perry/well_known_bindings.toml。路径一零配置直接 import最常用像 fastify、mysql2、pg 这类热门库Perry 内置了原生实现。官方示例 docs/examples/getting-started/npm_packages.ts 一行配置都不用写import fastify from fastify import mysql from mysql2/promise import Redis from ioredis import bcrypt from bcrypt路径二compilePackages 编译任意纯 TS/JS 包不在知名表里的纯 TypeScript 包在package.json中声明即可交给 LLVM 原生编译{ perry: { compilePackages: [noble/curves, noble/hashes], allow: { compilePackages: [noble/*] } } }注意这是双钥匙机制除了列出包名还需在perry.allow.compilePackages中匹配放行详见 docs/src/getting-started/project-config.md。不支持eval()、动态require()和原生插件.node文件的包——移植前请先排查完整指南见 docs/src/packages/porting.md。⚡ 实战一Fastify API 服务免 Node 部署import fastify from fastify; const app fastify(); app.get(/api/users, async () [{ id: 1, name: Alice }]); app.listen({ port: 3000 }, () console.log(Listening on :3000));perry compile src/main.ts -o api ./api编译后是一个独立二进制路由、参数解析、Query 字符串、JSON 请求体解析全部正常工作且与 npm 上 fastify 的 API 兼容docs/src/stdlib/http.md。部署到服务器时不需要 node_modules也不需要 Node 运行时——这就是免 Node 运行的核心价值。️ 实战二mysql2 连接 MySQL 数据库import { createConnection } from mysql2这类调用不会落到 JS 引擎上而是直接落到链接进二进制的 Rust 函数extern C符号——函数调用开销只是一次寄存器传递数据库驱动的协议解析以原生速度执行import mysql from mysql2/promise; const db mysql.createPool({ host: localhost, user: root, database: test }); const [rows] await db.query(SELECT * FROM users);图中是 Perry 生态的真实产品 Mango——一个约 7 MB 二进制、秒级冷启动的 MongoDB GUI正是数据库驱动原生编译落地的代表。 内置支持的 50 流行 npm 包清单按类别梳理完整列表见 docs/src/stdlib/overview.md类别支持的代表性 npm 包网络 HTTPfastify、hono、axios、node-fetch、ws、node:http/http2数据库mysql2、pg、mongodb、ioredis、redis、better-sqlite3、bun:sqlite加密认证bcrypt、argon2、jsonwebtoken、crypto、ethers工具类lodash、dayjs、moment、uuid、nanoid、validatorCLI 数据commander、decimal.js、bignumber.js、lru-cache其他sharp、cheerio、nodemailer、zlib、cron、worker_threads、exponential-backoffNode 内置模块fs、path、net、tls、child_process、crypto 等 53 个 node:* 模块~97% 测试通过率 用perry native list可随时查看你当前安装中自带哪些绑定。 性能实测原生编译快多少AOT 机器码意味着无引擎启动、无 JIT 预热。官方公开基准可复现方法论见 benchmarks/README.md显示负载PerryNode.js图像卷积4K5×5 高斯354 ms1,207 ms慢 3.4×JSON 解析~1 MB 往返184 ms380 ms慢 2.1×对象分配100 万个2 ms8 ms慢 4×内存方面优势同样明显JSON 流水线峰值内存 Perry 约 3.5 MBNode.js 需 36 MB。✅ 三步快速上手1️⃣ 安装 PerrymacOS / Linux / Windows 均支持npm install -g perryts/perry2️⃣ 创建项目并安装 npm 依赖perry init my-api cd my-api npm install fastify mysql23️⃣ 编译并运行perry compile src/main.ts -o my-api ./my-api # 独立原生二进制无需 Node运行perry doctor可验证环境配置。❓ 常见问题Q哪些 npm 包无法原生编译依赖 Node 原生插件.node文件、binding.gyp、node-gyp或大量使用Proxy/Symbol/动态require()的包不适合compilePackages路径。推荐换成纯 TS 替代方案或用perry.nativeLibrary编写原生绑定补齐边界详见 docs/src/packages/porting.md。Q二进制文件会很大吗编译器会按需链接运行时不引入任何 stdlib 约 300 KB只用到 fs path 约 3 MB完整 stdlib 约 48 MB。真实的 Mango GUI 应用整体仅 ~7 MB。Q能跨平台编译吗同一份代码可指向 macOS、Windows、Linux、iOS、Android 等 11 个目标平台--target web/--target wasm则输出 JavaScript / WebAssembly 供浏览器运行。【免费下载链接】perryA native TypeScript/JavaScript compiler written in Rust. Compiles TypeScript/JavaScript directly to executables using SWC and LLVM.项目地址: https://gitcode.com/gh_mirrors/perry2/perry创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考