7 个版本
0.2.5 | 2024年7月7日 |
---|---|
0.2.4 | 2024年7月7日 |
0.2.1 | 2024年6月26日 |
0.1.0 | 2024年6月25日 |
#47 in 构建工具
45 每月下载量
105KB
2K SLoC
Jundler
Node.js 项目的 JavaScript 可执行打包工具。
Jundler 是一个将您的 Node.js 项目打包成单个可执行文件的工具。它使用新的 单可执行应用 API 来打包您的项目,这样您就可以在任何平台上运行,无需安装 Node.js 或任何依赖项。
为什么选择 Jundler?
Jundler 与其他可执行打包工具(如 pkg、boxednode 或 js2bin)不同,它使用最新的 单可执行应用 API。而且,与其他打包工具不同,Jundler 是用 Rust 编写的,这使得它更快更高效!
更多功能请见 常见问题解答。
要求
- 已安装的
npm
和npx
。注意,您不需要安装node
,因为 Jundler 将下载与您的操作系统、架构和所需版本匹配的本地副本。 - 使用
cargo
从crates.io
安装。
用法
Jundler 将自动将您的 JavaScript 文件打包成单个独立文件。您需要在项目根目录中提供一个 sea-config.json
文件和通用的 package.json
文件。
要使用 Jundler,只需在终端中运行以下命令
jundler <path-to-nodejs-project>
运行 jundler --help
获取有关如何使用 Jundler 的更多信息。
常见问题解答
等等!有什么东西坏了!我该怎么办?
由于 Jundler 和 单可执行应用 API 都是新的,并且变化很快,因此某些东西可能会在夜间崩溃。如果出现问题,请在 Jundler GitHub 仓库 上提交问题,我会尽力回答您。
运行捆绑的可执行文件时出现导入错误。我该怎么办?
这是Single Executable Application API的一个已知问题,因为它不支持import
或require
。Jundler会自动通过使用ESBuild捆绑你的项目来修复这个问题,它会自动将所有的import
语句转换为require
语句。如果你仍然遇到问题,请在本Jundler GitHub仓库上提交一个issue。
[!NOTE] 要手动告诉Jundler捆绑你的项目,请使用
--bundle
/-b
标志。jundler <path-to-nodejs-project> --bundle
Jundler支持TypeScript吗?
是的。Jundler会自动检测TypeScript,ESBuild会完成其余的工作!
[!NOTE] 如果Jundler与你的TypeScript项目有问题,请尝试运行
jundler <path-to-nodejs-project> --bundle
来手动捆绑你的项目。
我的项目出现了一些与node-gyp
相关的奇怪错误。发生了什么?
这是Single Executable Application API的一个已知问题。Jundler目前无法为你解决这个问题,因为这涉及到以这种方式打包二进制文件,使得依赖的API可以像在原始Node.js上安装一样使用它。如果你在node-gyp
或node-pre-gyp
方面遇到问题,请在本Jundler GitHub仓库上提交一个issue。
Jundler支持交叉编译吗?
是的!只需分别使用-o
和-a
标志指定你想要构建的操作系统和架构。
Jundler支持macOS的代码签名吗?
是的,只要你自己在macOS机器上。Jundler会自动为你签名可执行文件,无需任何额外的输入!
[!WARNING] 如果你在一个不同的平台上为macOS构建,二进制文件必须手动在macOS机器上签名。Jundler应该会给你一个警告。
Jundler支持Windows的代码签名吗?
目前还不支持,但鉴于Windows不需要代码签名来运行二进制文件(它只会给出警告),现在应该没问题。所有Windows二进制文件在构建后必须在Windows机器上手动签名。
为什么叫“Jundler”?
因为它听起来很有趣,我很喜欢。 :p
TODO
- 自动检测TS/模块并相应捆绑
- 单元测试独立的构建步骤
- 自动下载Node.js主机运行时,使过程无需安装Node.js即可工作(仍需要安装
npm
/npx
) - 交叉编译
- macOS的代码签名
- 重新设计CLI + 允许清理缓存目录。
- 单元测试ESBuild集成
- 旋转器/进度条 + 更好的UI
- Windows的代码签名
- 更好的错误处理
- 在测试项目中执行集成测试
依赖项
~15-29MB
~473K SLoC