Skip to main content

使用 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-x645.8.118.5.02024-05-28
darwin-arm5.8.118.5.02024-05-25
win10-x645.8.118.5.02024-04-18
win11-arm5.8.118.5.02024-05-28
linux-x645.8.118.5.02024-03-21
linux-arm5.8.118.5.02024-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.

如果使用 nvmnvm-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

  1. 将 NodeJS 降级到主要版本 18 或更早版本。

    ¥Downgrade NodeJS to major version 18 or earlier.

  2. 下载测试文件 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
  1. 下载 xlsx-cli.js

    ¥Download xlsx-cli.js

curl -o xlsx-cli.js https://xlsx.nodejs.cn/cli/xlsx-cli.js
  1. 安装依赖:

    ¥Install the dependencies:

yarn add https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz exit-on-epipe commander@2
  1. 创建独立程序:

    ¥Create the standalone program:

npx pkg xlsx-cli.js

这会生成 xlsx-cli-linuxxlsx-cli-macosxlsx-cli-win.exe

¥This generates xlsx-cli-linux, xlsx-cli-macos, and xlsx-cli-win.exe .

  1. 运行生成的程序,将 pres.numbers 作为参数传递:

    ¥Run the generated program, passing pres.numbers as the argument:

./xlsx-cli-linux pres.numbers

[^1]: 该项目没有网站。源存储库 是公开可用的。

¥The project does not have a website. The source repository is publicly available.

[^2]: NodeJS 网站托管 预构建安装程序

¥The NodeJS website hosts prebuilt installers.