首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将node.js编译为二进制版本(使用本机模块)

如何将node.js编译为二进制版本(使用本机模块)
EN

Stack Overflow用户
提问于 2022-01-11 07:12:50
回答 2查看 1.5K关注 0票数 2

目前,我正在尝试构建Node.js项目(不同的绑定器和其他类型的东西)。我有了一个简单的想法,将Node.js捆绑到一个二进制文件中,用于Linux、macOS或Windows。

有两个包-- nexepkg --它们都不真正支持由bcryptrealm之类的包使用的原生.node模块。你在执行类似的编译吗?我非常乐意看到一些现实世界的例子(我在GitHub上找不到)。

但是..。为了什么?,这更像是一个有趣的想法,我们可以用Node.js进行存档。即使它能正常工作(我让它在没有本机模块的cjs包上工作),使用hello的示例项目的大小也可能超过30 on。

一个很酷的观察是,@vercel/ncc能够将我的项目编译到一个目录中,但是没有node_modules它也不能工作(可能,我没有环境来测试它)。

Update V1:在此类项目中构建realm是不可能的,最简单的解决方案是在node应用程序中不使用realm,因为它会导致二进制构建崩溃(这是因为realm正在使用大量其他软件包,比如electronreact-native,这些软件包在桌面平台上根本不起作用)。

我的代码可以在以下存储库获得:https://github.com/keinsell/typecraft

EN

回答 2

Stack Overflow用户

发布于 2022-01-14 03:32:51

经过数天的努力研究pkg的工作方式和寻找潜在的替代方案,我找到了为我工作的caxa,而且在路上,我还让pkg很好地使用(实际上只在bcrypt上测试过)本地模块。我对使用pkg构建Node.js二进制文件的核心见解是:

  • 使用矩阵-在CI的基础上构建包实例。win包来自windows主机,mac包来自macos主机等。
  • 确保将本机模块包含到资产中(在JavaScript中可以使用JavaScript函数(下面的示例),或者在package.json中使用pkg.assets对象-我并不真正理解它,但它包含在我关于vercel/pkg - vercel/pkg#1473的问题中。
代码语言:javascript
运行
复制
+ require('bcrypt/lib/binding/napi-v3/bcrypt_lib.node')

export async function main() { /* ... */ }

有些模块仍然在构建崩溃,最好的例子是realm,但我仍然会寻找一种方法来构建它,并将其包含到node.js二进制应用程序中。我在研究Node.js构建方面的所有进展都可以在https://github.com/keinsell/typecraft上获得,这个StackOverflow答案将随着时间的推移而更新,我的新发现也会更新。

票数 1
EN

Stack Overflow用户

发布于 2022-01-11 07:17:51

通过示例阅读此资源,您将能够将其编译成二进制版本。当然,nexe是必要的,但是使用pty.js,您可以使用所有本机库成功地编译它。查看源代码:http://www.jedi.be/blog/2013/05/14/Compiling%20-%20packaging%20a%20nodejs%20project%20as%20a%20single%20binary/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70662886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档