如何使用Node SEA将node_modules打包为可执行文件?
Node.js SEA 打包 node_modules 的正确方法
SEA 的assets配置仅支持单个文件,无法直接指向整个文件夹,所以你直接把node_modules作为 asset 项的配置是无效的。要打包依赖模块,可参考以下两种方法:
方法一:依赖自动打包(推荐)
SEA 本身会自动分析入口文件中通过require或import引入的依赖,并将其打包进sea-prep.blob文件,无需手动配置assets。
比如你的hello.js中引入了依赖:
const lodash = require('lodash'); console.log(lodash.join(['Hello', 'SEA'], ' '));
执行生成 SEA blob 的命令时,Node.js 会自动将 lodash 这类被直接引用的依赖打包进去,不需要额外配置。
方法二:手动指定动态加载的依赖(特殊场景)
如果存在动态加载的依赖(无法被自动分析到),可以在assets中通过通配符(Node.js 20+ 支持)指定需要打包的文件:
{ "main": "hello.js", "output": "sea-prep.blob", "assets": { "node_modules/lodash/**/*": "./node_modules/lodash/**/*" } }
这种方式仅适用于特殊场景,优先推荐方法一。
额外注意事项
- 确保使用 Node.js 19.0.0+ 版本(SEA 正式支持的最低版本),建议选用 20+ LTS 版本以获得更完善的功能。
- 生成 SEA 的完整流程:
- 编写配置文件(如
sea-config.json) - 生成 blob 文件:
node --experimental-sea-config sea-config.json - 复制 Node.js 可执行文件:
cp $(command -v node) hello-sea(Windows 系统使用copy命令) - 注入 blob 到可执行文件:
npx postject hello-sea NODE_SEA_BLOB sea-prep.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
- 编写配置文件(如
内容的提问来源于stack exchange,提问作者Jerry Green
相关产品推荐
相关产品推荐

