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

文章目录

    • 背景
    • nodev20: 实验性单一可执行应用程序(SEA)
    • windows上尝试打包, in powershell。
    • 结论

背景

在部分应用场景下,需要将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【node】nodejs-v20官方支持:将代码打包为单个可执行文件_第1张图片
  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无法打包成功。

你可能感兴趣的:(node.js)