【node】nodejs-v20官方支持:将代码打包为单个可执行文件

背景

在部分应用场景下,需要将nodejs项目打包为单个文件。市面上用过的方案,有pkg以及vercel/ncc. 前者可打包多个平台的二进制文件, 后者将整体项目打包为一个index.js, 然后在不同平台上直接node index.js运行。但是,在打包midway项目时,遇到了一些问题。

  1. pkg打包后, 运行直接提示解释器不可用。
  2. ncc打包后提示模块缺少。

nodev20: 实验性单一可执行应用程序(SEA)

实验性单一可执行应用程序(SEA)是Node.js v20中引入的一项新功能,它允许将你的应用程序与Node.js二进制文件捆绑在一起,使最终用户能够将其作为单一可执行文件分发和运行,这意味着部署到服务器时,无需预先安装node和npm,而是直接运行二进制打包产物就行。

这是社区长期以来的要求,团队在过去一年中一直在完善这一方法。

在Node.js v20中,构建单个可执行应用需要注入Node.js从JSON配置中准备的blob,而不是注入原始JS文件。

blob是一个包含二进制数据的文件,在本例中是由Node.js准备的,它被注入到二进制中。作出这一改变是为了能够将多个共存的资源嵌入到SEA中,这就开辟了新的用例。

下面是一个sea-config.json文件的例子:

{ 
	"main": "myscript.js", 
	"output": "sea-prep.blob" 
}

当用命令 node --experimental-sea-config sea-config.json 执行时,blob会被写入sea-prep.blob文件,然后可以被注入二进制文件。

SEA功能允许开发者发布Node.js应用程序,而不要求用户安装Node.js。该功能是由Darshan Sen创建的,他在OpenJS World上获得了JavaScriptLandia奖的一部分,获得了新来者的杰出贡献奖。

windows上尝试打包, in powershell。

  1. 编写sea-config.js在这里插入图片描述
  2. node --experimental-sea-config sea-config.json
  3. cp (Get-Command node).Source hello.exe
  4. npx postject hello.exe NODE_SEA_BLOB sea-prep.blob `
    –sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
  5. 执行 .\hello.exe, 输出了1.
    在这里插入图片描述

结论

使用nodev20打包单个文件为exe, 输出hello world这种demo项目是可以的, 感觉跟pkg原理差不多。 大点的项目,midwayjs, express无法打包成功。

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值