使用 pkg 打包表格
pkg
[^1] 是一种用于生成嵌入脚本的命令行工具的工具。
¥pkg
[^1] is a tool for generating command-line tools that embed scripts.
SheetJS 是一个用于从电子表格读取和写入数据的 JavaScript 库。
¥SheetJS is a JavaScript library for reading and writing data from spreadsheets.
此演示使用 pkg
和 SheetJS 创建独立的 CLI 工具,用于解析电子表格并转换为其他格式。
¥This demo uses pkg
and SheetJS to create a standalone CLI tool for parsing
spreadsheets and converting to other formats.
随着 NodeJS SEA 的正式发布,Vercel 选择弃用 pkg
。它对于部署嵌入 NodeJS v18 或更早版本的应用仍然有用,因为这些版本不支持 NodeJS SEA。
¥With the official release of NodeJS SEA, Vercel opted
to deprecate pkg
. It is still useful for deploying apps embedding NodeJS v18
or earlier since those versions do not support NodeJS SEA.
该演示在以下部署中进行了测试:
¥This demo was tested in the following deployments:
架构 | 版本 | NodeJS | 日期 |
---|---|---|---|
darwin-x64 | 5.8.1 | 18.5.0 | 2024-05-28 |
darwin-arm | 5.8.1 | 18.5.0 | 2024-05-25 |
win10-x64 | 5.8.1 | 18.5.0 | 2024-04-18 |
win11-arm | 5.8.1 | 18.5.0 | 2024-05-28 |
linux-x64 | 5.8.1 | 18.5.0 | 2024-03-21 |
linux-arm | 5.8.1 | 18.5.0 | 2024-05-26 |
集成详情
¥Integration Details
SheetJS NodeJS 模块 可以从脚本中需要。pkg
将自动处理打包。
¥The SheetJS NodeJS module can be
required from scripts. pkg
will automatically handle packaging.
脚本要求
¥Script Requirements
专门使用 SheetJS 库和 NodeJS 内置模块的脚本可以使用 pkg
进行打包。
¥Scripts that exclusively use SheetJS libraries and NodeJS built-in modules can
be bundled using pkg
.
演示脚本 xlsx-cli.js
在 NodeJS 中运行。这是一个用于读写电子表格的简单命令行工具。
¥The demo script xlsx-cli.js
runs in NodeJS. It
is a simple command-line tool for reading and writing spreadsheets.
局限性
¥Limitations
上次测试此演示时,pkg
失败,并出现引用 node20
的错误:
¥When this demo was last tested, pkg
failed with an error referencing node20
:
> Targets not specified. Assuming:
node20-linux-arm64, node20-macos-arm64, node20-win-arm64
> Error! No available node version satisfies 'node20'
pkg
不支持 NodeJS 20 或 22!
¥pkg
does not support NodeJS 20 or 22!
本地 NodeJS 版本必须回滚到 18 版本。
¥The local NodeJS version must be rolled back to version 18.
如果使用 nvm
或 nvm-windows
安装 NodeJS:
¥If nvm
or nvm-windows
was used to install NodeJS:
nvm install 18
nvm use 18
否则,在 macOS 和 Linux 上,n
可以管理全局安装:
¥Otherwise, on macOS and Linux, n
can manage the global installation:
sudo npm i -g n
sudo n 18
在 Windows 上,建议使用预构建的安装程序 [^2]
¥On Windows, it is recommended to use a prebuilt installer[^2]
完整示例
¥Complete Example
-
将 NodeJS 降级到主要版本 18 或更早版本。
¥Downgrade NodeJS to major version 18 or earlier.
-
下载测试文件 https://xlsx.nodejs.cn/pres.numbers:
¥Download the test file https://xlsx.nodejs.cn/pres.numbers:
curl -o pres.numbers https://xlsx.nodejs.cn/pres.numbers
-
下载
xlsx-cli.js
¥Download
xlsx-cli.js
curl -o xlsx-cli.js https://xlsx.nodejs.cn/cli/xlsx-cli.js
-
安装依赖:
¥Install the dependencies:
- npm
- pnpm
- Yarn
npm i --save https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz exit-on-epipe commander@2
pnpm install --save https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz exit-on-epipe commander@2
yarn add https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz exit-on-epipe commander@2
-
创建独立程序:
¥Create the standalone program:
npx pkg xlsx-cli.js
这会生成 xlsx-cli-linux
、xlsx-cli-macos
和 xlsx-cli-win.exe
。
¥This generates xlsx-cli-linux
, xlsx-cli-macos
, and xlsx-cli-win.exe
.
-
运行生成的程序,将
pres.numbers
作为参数传递:¥Run the generated program, passing
pres.numbers
as the argument:
- Linux
- macOS
- Windows
./xlsx-cli-linux pres.numbers
./xlsx-cli-macos pres.numbers
.\xlsx-cli-win.exe pres.numbers
[^1]: 该项目没有网站。源存储库 是公开可用的。
¥The project does not have a website. The source repository is publicly available.
[^2]: NodeJS 网站托管 预构建安装程序。
¥The NodeJS website hosts prebuilt installers.