目前,我正在尝试构建Node.js项目(不同的绑定器和其他类型的东西)。我有了一个简单的想法,将Node.js捆绑到一个二进制文件中,用于Linux、macOS或Windows。
有两个包-- nexe
和pkg
--它们都不真正支持由bcrypt
或realm
之类的包使用的原生.node
模块。你在执行类似的编译吗?我非常乐意看到一些现实世界的例子(我在GitHub上找不到)。
但是..。为了什么?,这更像是一个有趣的想法,我们可以用Node.js进行存档。即使它能正常工作(我让它在没有本机模块的cjs
包上工作),使用hello的示例项目的大小也可能超过30 on。
一个很酷的观察是,@vercel/ncc
能够将我的项目编译到一个目录中,但是没有node_modules
它也不能工作(可能,我没有环境来测试它)。
Update V1:在此类项目中构建realm
是不可能的,最简单的解决方案是在node
应用程序中不使用realm
,因为它会导致二进制构建崩溃(这是因为realm
正在使用大量其他软件包,比如electron
或react-native
,这些软件包在桌面平台上根本不起作用)。
我的代码可以在以下存储库获得:https://github.com/keinsell/typecraft
发布于 2022-01-14 03:32:51
经过数天的努力研究pkg
的工作方式和寻找潜在的替代方案,我找到了为我工作的caxa
,而且在路上,我还让pkg
很好地使用(实际上只在bcrypt
上测试过)本地模块。我对使用pkg
构建Node.js二进制文件的核心见解是:
win
包来自windows
主机,mac
包来自macos
主机等。package.json
中使用pkg.assets
对象-我并不真正理解它,但它包含在我关于vercel/pkg
- vercel/pkg#1473的问题中。+ require('bcrypt/lib/binding/napi-v3/bcrypt_lib.node')
export async function main() { /* ... */ }
有些模块仍然在构建崩溃,最好的例子是realm
,但我仍然会寻找一种方法来构建它,并将其包含到node.js二进制应用程序中。我在研究Node.js构建方面的所有进展都可以在https://github.com/keinsell/typecraft上获得,这个StackOverflow答案将随着时间的推移而更新,我的新发现也会更新。
发布于 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/
https://stackoverflow.com/questions/70662886
复制相似问题