docs.sheetjs.com/docz/docs/03-demos/06-desktop/09-cli.md

275 lines
6.7 KiB
Markdown
Raw Normal View History

2022-07-31 23:45:34 +00:00
---
title: Command-Line Tools
2023-02-28 11:40:44 +00:00
pagination_prev: demos/mobile/index
pagination_next: demos/data/index
sidebar_custom_props:
cli: true
2022-07-31 23:45:34 +00:00
---
import current from '/version.js';
2022-08-01 08:15:50 +00:00
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
2023-05-07 13:58:36 +00:00
import CodeBlock from '@theme/CodeBlock';
2022-07-31 23:45:34 +00:00
2022-08-25 08:22:28 +00:00
With the availability of JS engines and the success of server-side platforms,
it is feasible to build command-line tools for various workflows.
2022-07-31 23:45:34 +00:00
This demo covers a number of strategies for building standalone processors. The
goal is to generate CSV output from an arbitrary spreadsheet file.
2022-08-01 08:15:50 +00:00
## NodeJS
2022-08-25 08:22:28 +00:00
There are a few popular tools for compiling NodeJS scripts to CLI programs.
2022-08-01 08:15:50 +00:00
The demo script presents a friendly command line interface including flags:
```bash
$ ./xlsx-cli -h
Usage: xlsx-cli [options] <file> [sheetname]
Options:
-V, --version output the version number
-f, --file <file> use specified workbook
-s, --sheet <sheet> print specified sheet (default first sheet)
...
```
2023-05-09 08:08:01 +00:00
<details><summary><b>Tested Deployments</b> (click to show)</summary>
This demo was tested in the following deployments:
**`pkg`**
| Architecture | Version | Node Target | Date |
|:-------------|:--------|:------------|:-----------|
| `darwin-x64` | `5.8.1` | `18.5.0` | 2023-05-08 |
| `win32-x64` | `5.8.1` | `18.5.0` | 2023-05-08 |
| `linux-x64` | `5.8.1` | `18.5.0` | 2023-05-08 |
**`nexe`**
| Architecture | Version | Node Target | Date |
|:-------------|:-------------|:------------|:-----------|
| `darwin-x64` | `4.0.0-rc.2` | `14.15.3` | 2023-05-08 |
| `win32-x64` | `4.0.0-rc.2` | `14.15.3` | 2023-05-08 |
| `linux-x64` | `4.0.0-rc.2` | `14.15.3` | 2023-05-08 |
**`boxednode`**
| Architecture | Version | Node Target | Date |
|:-------------|:--------|:------------|:-----------|
| `darwin-x64` | `2.0.1` | `20.1.0` | 2023-05-08 |
| `linux-x64` | `2.0.1` | `20.1.0` | 2023-05-08 |
</details>
0) Download the test file <https://sheetjs.com/pres.numbers>:
```bash
curl -LO https://sheetjs.com/pres.numbers
```
2022-08-01 08:15:50 +00:00
1) Download [`xlsx-cli.js`](pathname:///cli/xlsx-cli.js)
2023-05-09 08:08:01 +00:00
```bash
curl -LO https://docs.sheetjs.com/cli/xlsx-cli.js
```
2022-08-01 08:15:50 +00:00
2) Install the dependencies:
2023-05-07 13:58:36 +00:00
<Tabs groupId="pm">
2022-08-01 08:15:50 +00:00
<TabItem value="npm" label="npm">
2023-05-07 13:58:36 +00:00
<CodeBlock language="bash">{`\
2022-08-01 08:15:50 +00:00
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2`}
2023-05-07 13:58:36 +00:00
</CodeBlock>
2022-08-01 08:15:50 +00:00
</TabItem>
<TabItem value="pnpm" label="pnpm">
2023-05-07 13:58:36 +00:00
<CodeBlock language="bash">{`\
2022-08-01 08:15:50 +00:00
pnpm install https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2`}
2023-05-07 13:58:36 +00:00
</CodeBlock>
2022-08-01 08:15:50 +00:00
</TabItem>
<TabItem value="yarn" label="Yarn" default>
2023-05-07 13:58:36 +00:00
<CodeBlock language="bash">{`\
2022-08-01 08:15:50 +00:00
yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2`}
2023-05-07 13:58:36 +00:00
</CodeBlock>
2022-08-01 08:15:50 +00:00
</TabItem>
</Tabs>
3) Follow tooling steps:
<Tabs>
<TabItem value="nexe" label="Nexe">
2023-02-28 11:40:44 +00:00
Run `nexe` and manually specify NodeJS version 14.15.3
2022-08-01 08:15:50 +00:00
```bash
npx nexe -t 14.15.3 xlsx-cli.js
```
This generates `xlsx-cli` or `xlsx-cli.exe` depending on platform.
</TabItem>
<TabItem value="pkg" label="pkg">
2023-02-28 11:40:44 +00:00
Run `pkg`:
2022-08-01 08:15:50 +00:00
```bash
npx pkg xlsx-cli.js
```
This generates `xlsx-cli-linux`, `xlsx-cli-macos`, and `xlsx-cli-win.exe` .
2023-05-09 08:08:01 +00:00
</TabItem>
<TabItem value="boxednode" label="boxednode">
Run `boxednode`:
```bash
npx boxednode@2.0.1 -s xlsx-cli.js -t xlsx-cli
```
2022-08-01 08:15:50 +00:00
</TabItem>
</Tabs>
2023-05-09 08:08:01 +00:00
4) Run the generated program, passing `pres.numbers` as the argument. For
example, on an Intel Mac, `nexe` generates `xlsx-cli` so the command is:
```bash
./xlsx-cli pres.numbers
```
2023-05-25 01:36:15 +00:00
## V8
The [V8](/docs/demos/engines/v8) demo covers standalone programs that embed the
V8 engine. This demo uses the Rust integration to generate a command line tool.
<details><summary><b>Tested Deployments</b> (click to show)</summary>
This demo was last tested in the following deployments:
| Architecture | V8 Version | Date |
|:-------------|:-------------|:-----------|
| `darwin-x64` | `11.4.183.2` | 2023-05-22 |
| `linux-x64` | `11.4.183.2` | 2023-05-23 |
| `win32-x64` | `11.4.183.2` | 2023-05-23 |
</details>
0) Make a new folder for the project:
```bash
mkdir sheetjs2csv
cd sheetjs2csv
```
1) Download the following scripts:
- [`Cargo.toml`](pathname:///cli/Cargo.toml)
- [`snapshot.rs`](pathname:///cli/snapshot.rs)
- [`sheet2csv.rs`](pathname:///cli/sheet2csv.rs)
```bash
curl -LO https://docs.sheetjs.com/cli/Cargo.toml
curl -LO https://docs.sheetjs.com/cli/snapshot.rs
curl -LO https://docs.sheetjs.com/cli/sheet2csv.rs
```
2) Download the [standalone build](/docs/getting-started/installation/standalone):
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
</CodeBlock>
3) Build the V8 snapshot:
```bash
cargo build --bin snapshot
cargo run --bin snapshot
```
4) Build `sheet2csv` (`sheet2csv.exe` in Windows):
```bash
cargo build --release --bin sheet2csv
```
5) Download the test file <https://sheetjs.com/pres.numbers>:
```bash
curl -LO https://sheetjs.com/pres.numbers
```
6) Test the application:
<Tabs groupId="os">
<TabItem value="unix" label="Linux/MacOS">
```bash
mv target/release/sheet2csv .
./sheet2csv pres.numbers
```
</TabItem>
<TabItem value="win" label="Windows">
```bash
mv target/release/sheet2csv.exe .
./sheet2csv pres.numbers
```
</TabItem>
</Tabs>
2023-05-09 08:08:01 +00:00
## Deno
`deno compile` generates a standalone executable that includes the entire JS
runtime as well as user JS code.
When compiling, the `--allow-read` option must be specified to allow the script
to read files from the filesystem with `Deno.readFileSync`.
<https://docs.sheetjs.com/cli/sheet2csv.ts> can be compiled and run from Deno.
<details><summary><b>Tested Deployments</b> (click to show)</summary>
This demo was last tested in the following deployments:
| Architecture | Version | Date |
|:-------------|:---------|:-----------|
| `darwin-x64` | `1.33.2` | 2023-05-08 |
| `win32-x64` | `1.33.2` | 2023-05-08 |
| `linux-x64` | `1.33.2` | 2023-05-08 |
</details>
0) Download the test file <https://sheetjs.com/pres.numbers>:
```bash
curl -LO https://sheetjs.com/pres.numbers
```
1) Test the script with `deno run`:
```bash
deno run -r --allow-read https://docs.sheetjs.com/cli/sheet2csv.ts pres.numbers
```
If this worked, the program will print a CSV of the first worksheet.
2) Compile and run `sheet2csv`:
```bash
deno compile -r --allow-read https://docs.sheetjs.com/cli/sheet2csv.ts
./sheet2csv pres.numbers
```
## Dedicated Engines
The following demos for JS engines produce standalone programs:
- [Duktape](/docs/demos/engines/duktape)
2023-05-23 06:28:14 +00:00
- [ChakraCore](/docs/demos/engines/chakra)
- [QuickJS](/docs/demos/engines/quickjs)
2023-05-09 08:08:01 +00:00
- [Goja](/docs/demos/engines/goja)
- [JavaScriptCore](/docs/demos/engines/jsc)