forked from sheetjs/docs.sheetjs.com
		
	requirejs
This commit is contained in:
		
							parent
							
								
									28570a8fbd
								
							
						
					
					
						commit
						e6fc787cd2
					
				| @ -46,6 +46,12 @@ Web Worker scripts can be bundled using the same approach. | ||||
| 
 | ||||
| <details><summary><b>Complete Example</b> (click to show)</summary> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 07 against Browserify `17.0.0` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 1) Install the tarball using a package manager: | ||||
| 
 | ||||
| <Tabs groupId="pm"> | ||||
| @ -72,6 +78,12 @@ yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} | ||||
| - [`index.html`](pathname:///browserify/index.html) | ||||
| - [`xlsxworker.js`](pathname:///browserify/xlsxworker.js) | ||||
| 
 | ||||
| ```bash | ||||
| curl -LO https://docs.sheetjs.com/browserify/app.js | ||||
| curl -LO https://docs.sheetjs.com/browserify/index.html | ||||
| curl -LO https://docs.sheetjs.com/browserify/xlsxworker.js | ||||
| ``` | ||||
| 
 | ||||
| 3) Bundle the scripts: | ||||
| 
 | ||||
| ```bash | ||||
| @ -98,6 +110,12 @@ local testing, a bundled script can save tens of milliseconds per run. | ||||
| 
 | ||||
| <details><summary><b>Complete Example</b> (click to show)</summary> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 07 against Bun `0.5.9` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 1) Install the tarball using a package manager: | ||||
| 
 | ||||
| <Tabs groupId="pm"> | ||||
| @ -190,6 +208,12 @@ Both the `node` and `browser` platforms work out of the box. | ||||
| 
 | ||||
| <details><summary><b>Complete Example</b> (click to show)</summary> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 07 against esbuild `0.17.18` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| <Tabs> | ||||
|   <TabItem value="browser" label="Browser"> | ||||
| 
 | ||||
| @ -259,7 +283,7 @@ writeFileXLSX(workbook, "Presidents.xlsx"); | ||||
| 4) Create bundle: | ||||
| 
 | ||||
| ```bash | ||||
| npx esbuild esbrowser.js --bundle --outfile=esb.browser.js | ||||
| npx esbuild@0.17.18 esbrowser.js --bundle --outfile=esb.browser.js | ||||
| ``` | ||||
| 
 | ||||
| 5) Start a local HTTP server, then go to `http://localhost:8080/` | ||||
| @ -335,7 +359,7 @@ writeFile(workbook, "Presidents.xlsx"); | ||||
| 3) Create bundle: | ||||
| 
 | ||||
| ```bash | ||||
| npx esbuild esbnode.js --bundle --platform=node --outfile=esb.node.js | ||||
| npx esbuild@0.17.18 esbnode.js --bundle --platform=node --outfile=esb.node.js | ||||
| ``` | ||||
| 
 | ||||
| 4) Run the bundle: | ||||
| @ -362,6 +386,12 @@ bug. Upgrade to Parcel version 1.5.0 or later. | ||||
| 
 | ||||
| <details><summary><b>Complete Example</b> (click to show)</summary> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 07 against parcel `2.8.3` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| This demo follows the [Presidents Example](/docs/getting-started/example). | ||||
| 
 | ||||
| 1) Save the following to `index.html`: | ||||
| @ -434,7 +464,7 @@ yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} | ||||
| 3) Run the Parcel CLI tool: | ||||
| 
 | ||||
| ```bash | ||||
| npx -y parcel index.html | ||||
| npx -y parcel@2.8.3 index.html | ||||
| ``` | ||||
| 
 | ||||
| 4) Access the page listed in the output (typically `http://localhost:1234`) and | ||||
| @ -472,28 +502,165 @@ CDN, uses it to load the standalone script from the SheetJS CDN, and uses the | ||||
| 
 | ||||
| The `r.js` optimizer also supports the standalone scripts. | ||||
| 
 | ||||
| <details><summary><b>Complete Example</b> (click to show)</summary> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 07 against RequireJS `2.3.3` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| :::caution | ||||
| 
 | ||||
| The `r.js` optimizer does not support ES6 syntax including arrow functions and | ||||
| the `async` keyword! The demo JS code uses traditional functions. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 0) Download the standalone build: | ||||
| 
 | ||||
| <CodeBlock language="bash">{`\ | ||||
| curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`} | ||||
| </CodeBlock> | ||||
| 
 | ||||
| 1) Save the following to `index.html`: | ||||
| 
 | ||||
| ```html title="index.html" | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
|   <head></head> | ||||
|   <body> | ||||
|     <h1>SheetJS Presidents Demo</h1> | ||||
|     <button id="xport">Click here to export</button> | ||||
|     <script src="http://requirejs.org/docs/release/2.3.3/comments/require.js"></script> | ||||
|     <script> | ||||
| /* Wire up RequireJS */ | ||||
| require.config({ | ||||
|   baseUrl: ".", | ||||
|   name: "SheetJSRequire", | ||||
|   paths: { | ||||
|     xlsx: "./xlsx.full.min" | ||||
|   } | ||||
| }); | ||||
|     </script> | ||||
|     <script src="SheetJSRequire.js"></script> | ||||
|   </body> | ||||
| </html> | ||||
| ``` | ||||
| 
 | ||||
| 2) Save the following to `SheetJSRequire.js`: | ||||
| 
 | ||||
| ```js title="SheetJSRequire.js" | ||||
| require(["xlsx"], function(XLSX) { | ||||
|   document.getElementById("xport").addEventListener("click", function() { | ||||
|     /* fetch JSON data and parse */ | ||||
|     var url = "https://sheetjs.com/data/executive.json"; | ||||
|     fetch(url).then(function(res) { return res.json(); }).then(function(raw_data) { | ||||
| 
 | ||||
|     /* filter for the Presidents */ | ||||
|     var prez = raw_data.filter(function(row) { return row.terms.some(function(term) { return term.type === "prez"; }); }); | ||||
| 
 | ||||
|     /* flatten objects */ | ||||
|     var rows = prez.map(function(row) { return { | ||||
|       name: row.name.first + " " + row.name.last, | ||||
|       birthday: row.bio.birthday | ||||
|     }; }); | ||||
| 
 | ||||
|     /* generate worksheet and workbook */ | ||||
|     var worksheet = XLSX.utils.json_to_sheet(rows); | ||||
|     var workbook = XLSX.utils.book_new(); | ||||
|     XLSX.utils.book_append_sheet(workbook, worksheet, "Dates"); | ||||
| 
 | ||||
|     /* fix headers */ | ||||
|     XLSX.utils.sheet_add_aoa(worksheet, [["Name", "Birthday"]], { origin: "A1" }); | ||||
| 
 | ||||
|     /* calculate column width */ | ||||
|     var max_width = rows.reduce(function(w, r) { return Math.max(w, r.name.length); }, 10); | ||||
|     worksheet["!cols"] = [ { wch: max_width } ]; | ||||
| 
 | ||||
|     /* create an XLSX file and try to save to Presidents.xlsx */ | ||||
|     XLSX.writeFileXLSX(workbook, "Presidents.xlsx"); | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
| ``` | ||||
| 
 | ||||
| 3) Start a local HTTP server, then go to `http://localhost:8080/` | ||||
| 
 | ||||
| ```bash | ||||
| npx http-server . | ||||
| ``` | ||||
| 
 | ||||
| Click on "Click here to export" to generate a file. | ||||
| 
 | ||||
| 4) Create `build.js` configuration for the optimizer: | ||||
| 
 | ||||
| ```js title="build.js" | ||||
| ({ | ||||
|   baseUrl: ".", | ||||
|   name: "SheetJSRequire", | ||||
|   paths: { | ||||
|     xlsx: "./xlsx.full.min" | ||||
|   }, | ||||
|   out: "SheetJSRequire.min.js" | ||||
| }); | ||||
| ``` | ||||
| 
 | ||||
| 5) Run the `r.js` optimizer to create `SheetJSRequire.min.js`: | ||||
| 
 | ||||
| ```bash | ||||
| npx -p requirejs@2.3.3 r.js -o build.js | ||||
| ``` | ||||
| 
 | ||||
| 6) Save the following to `optimized.html`: | ||||
| 
 | ||||
| ```html title="optimized.html" | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
|   <head></head> | ||||
|   <body> | ||||
|     <h1>SheetJS Presidents Demo</h1> | ||||
|     <button id="xport">Click here to export</button> | ||||
|     <script src="http://requirejs.org/docs/release/2.3.3/comments/require.js"></script> | ||||
|     <script src="SheetJSRequire.min.js"></script> | ||||
|   </body> | ||||
| </html> | ||||
| ``` | ||||
| 
 | ||||
| 7) Open `http://localhost:8080/optimized.html` | ||||
| 
 | ||||
| Click on "Click here to export" to generate a file. | ||||
| 
 | ||||
| </details> | ||||
| 
 | ||||
| ## Rollup | ||||
| 
 | ||||
| Rollup requires `@rollup/plugin-node-resolve` to support NodeJS modules: | ||||
| 
 | ||||
| <details><summary><b>Complete Example</b> (click to show)</summary> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 07 against Rollup 3.21.5 | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 1) Install the tarball using a package manager: | ||||
| 
 | ||||
| <Tabs groupId="pm"> | ||||
|   <TabItem value="npm" label="npm"> | ||||
| <CodeBlock language="bash">{`\ | ||||
| npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} rollup @rollup/plugin-node-resolve | ||||
| npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} rollup@3.21.5 @rollup/plugin-node-resolve | ||||
| </CodeBlock> | ||||
|   </TabItem> | ||||
|   <TabItem value="pnpm" label="pnpm"> | ||||
| <CodeBlock language="bash">{`\ | ||||
| pnpm install https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} rollup @rollup/plugin-node-resolve | ||||
| pnpm install https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} rollup@3.21.5 @rollup/plugin-node-resolve | ||||
| </CodeBlock> | ||||
|   </TabItem> | ||||
|   <TabItem value="yarn" label="Yarn" default> | ||||
| <CodeBlock language="bash">{`\ | ||||
| yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} rollup @rollup/plugin-node-resolve | ||||
| yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} rollup@3.21.5 @rollup/plugin-node-resolve | ||||
| </CodeBlock> | ||||
|   </TabItem> | ||||
| </Tabs> | ||||
| @ -572,6 +739,12 @@ Snowpack works with no caveats. | ||||
| 
 | ||||
| <details><summary><b>Complete Example</b> (click to show)</summary> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 07 against Snowpack `3.8.8` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 1) Install the tarball using a package manager: | ||||
| 
 | ||||
| <Tabs groupId="pm"> | ||||
| @ -652,7 +825,7 @@ Unlike other bundlers, Snowpack requires a full page including `HEAD` element. | ||||
| 4) Build for production: | ||||
| 
 | ||||
| ```bash | ||||
| npx snowpack build | ||||
| npx snowpack@3.8.8 build | ||||
| ``` | ||||
| 
 | ||||
| 5) Start a local HTTP server, then go to `http://localhost:8080/` | ||||
| @ -669,24 +842,37 @@ Click on "Click here to export" to generate a file. | ||||
| 
 | ||||
| SWC provides `spack` for bundling scripts. | ||||
| 
 | ||||
| :::warning | ||||
| 
 | ||||
| When this demo was last tested, there was a bug affecting 1.2.247 and 1.3 . It | ||||
| is strongly recommended to use `@swc/core@1.2.245` until the bug is fixed. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| <details><summary><b>Complete Example</b> (click to show)</summary> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 07 against SWC 1.2.246 | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 1) Install the dependencies using a package manager: | ||||
| 
 | ||||
| <Tabs groupId="pm"> | ||||
|   <TabItem value="npm" label="npm"> | ||||
| <CodeBlock language="bash">{`\ | ||||
| npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} regenerator-runtime @swc/cli @swc/core | ||||
| npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} regenerator-runtime @swc/cli @swc/core@1.2.246 | ||||
| </CodeBlock> | ||||
|   </TabItem> | ||||
|   <TabItem value="pnpm" label="pnpm"> | ||||
| <CodeBlock language="bash">{`\ | ||||
| pnpm install https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} regenerator-runtime @swc/cli @swc/core | ||||
| pnpm install https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} regenerator-runtime @swc/cli @swc/core@1.2.246 | ||||
| </CodeBlock> | ||||
|   </TabItem> | ||||
|   <TabItem value="yarn" label="Yarn" default> | ||||
| <CodeBlock language="bash">{`\ | ||||
| yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} regenerator-runtime @swc/cli @swc/core | ||||
| yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} regenerator-runtime @swc/cli @swc/core@1.2.246 | ||||
| </CodeBlock> | ||||
|   </TabItem> | ||||
| </Tabs> | ||||
| @ -775,7 +961,7 @@ This command will create the script `lib/web.js` | ||||
| 6) Start a local HTTP server, then go to `http://localhost:8080/` | ||||
| 
 | ||||
| ```bash | ||||
| npx http-server build/ | ||||
| npx http-server | ||||
| ``` | ||||
| 
 | ||||
| Click on "Click here to export" to generate a file. | ||||
| @ -887,6 +1073,12 @@ SystemJS.config({ | ||||
| <Tabs> | ||||
|   <TabItem value="browser" label="Browser"> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 07 against SystemJS 0.20.16 | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| The [Live demo](pathname:///systemjs/systemjs.html) loads SystemJS from the | ||||
| CDN, uses it to load the standalone script from the SheetJS CDN and emulate | ||||
| a `require` implementation when loading [`main.js`](pathname:///systemjs/main.js) | ||||
| @ -896,10 +1088,17 @@ a `require` implementation when loading [`main.js`](pathname:///systemjs/main.js | ||||
|   </TabItem> | ||||
|   <TabItem value="nodejs" label="NodeJS"> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 07 against SystemJS 0.19.47 | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 1) Install the dependencies: | ||||
| 
 | ||||
| <CodeBlock language="bash">{`\ | ||||
| npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz systemjs@0.19`} | ||||
| npm init -y | ||||
| npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz systemjs@0.19.47`} | ||||
| </CodeBlock> | ||||
| 
 | ||||
| 2) Save the following script to `SheetJSystem.js`: | ||||
| @ -976,18 +1175,20 @@ ViteJS is compatible with SheetJS versions starting from 0.18.10. | ||||
| 
 | ||||
| <details><summary><b>Complete Example</b> (click to show)</summary> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 07 against ViteJS `4.3.5` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 1) Create a new ViteJS project: | ||||
| 
 | ||||
| ``` | ||||
| npm create vite@latest | ||||
| cd sheetjs-vite # (project name) | ||||
| npm create vite@latest sheetjs-vite -- --template vue-ts | ||||
| cd sheetjs-vite | ||||
| npm i | ||||
| ``` | ||||
| 
 | ||||
| When prompted for **Project Name**, type **`sheetjs-vite`** | ||||
| 
 | ||||
| When prompted for **Framework**, select **`vue`** then **`vue-ts`** | ||||
| 
 | ||||
| 2) Add the SheetJS dependency: | ||||
| 
 | ||||
| <CodeBlock language="bash">{`\ | ||||
| @ -1044,7 +1245,7 @@ writeFileXLSX(workbook, "Presidents.xlsx"); | ||||
| ``` | ||||
| 
 | ||||
| 4) Run `npm run dev` and test functionality by opening a web browser to | ||||
| http://localhost:5173/ and clicking the button | ||||
| `http://localhost:5173/` and clicking the button | ||||
| 
 | ||||
| 5) Run `npx vite build` and verify the generated pages work by running a local | ||||
| web server in the `dist` folder: | ||||
| @ -1053,7 +1254,7 @@ web server in the `dist` folder: | ||||
| npx http-server dist/ | ||||
| ``` | ||||
| 
 | ||||
| Access `http://localhost:8080` in your web browser. | ||||
| Access `http://localhost:8080` in your web browser and click the export button. | ||||
| 
 | ||||
| </details> | ||||
| 
 | ||||
| @ -1107,6 +1308,19 @@ import * as XLSX from 'xlsx/dist/xlsx.full.min.js'; | ||||
| 
 | ||||
| <details><summary><b>Complete Example</b> (click to show)</summary> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was tested against the following Webpack versions: | ||||
| 
 | ||||
| | Version  | Date       | Required Workarounds                | | ||||
| |:---------|:-----------|:------------------------------------| | ||||
| | `2.7.0`  | 2023-05-07 | Import `xlsx/dist/xlsx.full.min.js` | | ||||
| | `3.12.0` | 2023-05-07 | Import `xlsx/dist/xlsx.full.min.js` | | ||||
| | `4.46.0` | 2023-05-07 | Downgrade NodeJS (tested v16.20.0)  | | ||||
| | `5.82.0` | 2023-05-07 |                                     | | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 1) Install the tarball using a package manager: | ||||
| 
 | ||||
| <Tabs groupId="pm"> | ||||
| @ -1133,34 +1347,35 @@ yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} | ||||
| // highlight-next-line | ||||
| import { utils, version, writeFileXLSX } from 'xlsx'; | ||||
| 
 | ||||
| document.getElementById("xport").addEventListener("click", async() => { | ||||
| /* fetch JSON data and parse */ | ||||
| const url = "https://sheetjs.com/data/executive.json"; | ||||
| const raw_data = await (await fetch(url)).json(); | ||||
| document.getElementById("xport").addEventListener("click", function() { | ||||
|   /* fetch JSON data and parse */ | ||||
|   var url = "https://sheetjs.com/data/executive.json"; | ||||
|   fetch(url).then(function(res) { return res.json(); }).then(function(raw_data) { | ||||
| 
 | ||||
| /* filter for the Presidents */ | ||||
| const prez = raw_data.filter(row => row.terms.some(term => term.type === "prez")); | ||||
|     /* filter for the Presidents */ | ||||
|     var prez = raw_data.filter(function(row) { return row.terms.some(function(term) { return term.type === "prez"; }); }); | ||||
| 
 | ||||
| /* flatten objects */ | ||||
| const rows = prez.map(row => ({ | ||||
|   name: row.name.first + " " + row.name.last, | ||||
|   birthday: row.bio.birthday | ||||
| })); | ||||
|     /* flatten objects */ | ||||
|     var rows = prez.map(function(row) { return { | ||||
|       name: row.name.first + " " + row.name.last, | ||||
|       birthday: row.bio.birthday | ||||
|     }; }); | ||||
| 
 | ||||
| /* generate worksheet and workbook */ | ||||
| const worksheet = utils.json_to_sheet(rows); | ||||
| const workbook = utils.book_new(); | ||||
| utils.book_append_sheet(workbook, worksheet, "Dates"); | ||||
|     /* generate worksheet and workbook */ | ||||
|     var worksheet = utils.json_to_sheet(rows); | ||||
|     var workbook = utils.book_new(); | ||||
|     utils.book_append_sheet(workbook, worksheet, "Dates"); | ||||
| 
 | ||||
| /* fix headers */ | ||||
| utils.sheet_add_aoa(worksheet, [["Name", "Birthday"]], { origin: "A1" }); | ||||
|     /* fix headers */ | ||||
|     utils.sheet_add_aoa(worksheet, [["Name", "Birthday"]], { origin: "A1" }); | ||||
| 
 | ||||
| /* calculate column width */ | ||||
| const max_width = rows.reduce((w, r) => Math.max(w, r.name.length), 10); | ||||
| worksheet["!cols"] = [ { wch: max_width } ]; | ||||
|     /* calculate column width */ | ||||
|     var max_width = rows.reduce(function(w, r) { return Math.max(w, r.name.length); }, 10); | ||||
|     worksheet["!cols"] = [ { wch: max_width } ]; | ||||
| 
 | ||||
| /* create an XLSX file and try to save to Presidents.xlsx */ | ||||
| writeFileXLSX(workbook, "Presidents.xlsx"); | ||||
|     /* create an XLSX file and try to save to Presidents.xlsx */ | ||||
|     writeFileXLSX(workbook, "Presidents.xlsx"); | ||||
|   }); | ||||
| }); | ||||
| ``` | ||||
| 
 | ||||
| @ -1181,6 +1396,19 @@ module.exports = { | ||||
| <Tabs> | ||||
|   <TabItem value="23" label="2.x and 3.x"> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| In Webpack 2.x and 3.x, the import statement must use the standalone build: | ||||
| 
 | ||||
| ```js title="index.js" | ||||
| // highlight-next-line | ||||
| import { utils, version, writeFileXLSX } from 'xlsx/dist/xlsx.full.min.js'; | ||||
| ``` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| This line must be changed before bundling. | ||||
| 
 | ||||
| **Webpack 2.x** | ||||
| 
 | ||||
| ```bash | ||||
| @ -1214,15 +1442,22 @@ version above 4.0 can be pinned by locally installing webpack and the CLI tool. | ||||
| 
 | ||||
| **Webpack 4.x** | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| Webpack 4 is incompatible with Node 18+. When this demo was last tested, NodeJS | ||||
| was locally downgraded to 16.20.0 | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ```bash | ||||
| npm i --save webpack@4.x webpack-cli | ||||
| npm i --save webpack@4.x webpack-cli@4.x | ||||
| npx webpack --mode=production | ||||
| ``` | ||||
| 
 | ||||
| **Webpack 5.x** | ||||
| 
 | ||||
| ```bash | ||||
| npm i --save webpack@5.x webpack-cli | ||||
| npm i --save webpack@5.x webpack-cli@5.x | ||||
| npx webpack --mode=production | ||||
| ``` | ||||
| 
 | ||||
| @ -1263,10 +1498,16 @@ Click on "Click here to export" to generate a file. | ||||
| 
 | ||||
| ## WMR | ||||
| 
 | ||||
| WMR follows the same structure as Snowpack | ||||
| WMR works with no caveats. | ||||
| 
 | ||||
| <details><summary><b>Complete Example</b> (click to show)</summary> | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 07 against WMR `3.8.0` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 1) Install the tarball using a package manager: | ||||
| 
 | ||||
| <Tabs groupId="pm"> | ||||
| @ -1341,7 +1582,7 @@ writeFileXLSX(workbook, "Presidents.xlsx"); | ||||
| 4) Build for production: | ||||
| 
 | ||||
| ```bash | ||||
| npx wmr build | ||||
| npx wmr@3.8.0 build | ||||
| ``` | ||||
| 
 | ||||
| 5) Start a local HTTP server in `dist` folder and go to `http://localhost:8080/` | ||||
|  | ||||
| @ -17,37 +17,6 @@ it is feasible to build command-line tools for various workflows. | ||||
| This demo covers a number of strategies for building standalone processors. The | ||||
| goal is to generate CSV output from an arbitrary spreadsheet file. | ||||
| 
 | ||||
| ## 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: | ||||
| 
 | ||||
| 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 | ||||
| ``` | ||||
| 
 | ||||
| ## NodeJS | ||||
| 
 | ||||
| There are a few popular tools for compiling NodeJS scripts to CLI programs. | ||||
| @ -65,8 +34,47 @@ Options: | ||||
| ... | ||||
| ``` | ||||
| 
 | ||||
| <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 | ||||
| ``` | ||||
| 
 | ||||
| 1) Download [`xlsx-cli.js`](pathname:///cli/xlsx-cli.js) | ||||
| 
 | ||||
| ```bash | ||||
| curl -LO https://docs.sheetjs.com/cli/xlsx-cli.js | ||||
| ``` | ||||
| 
 | ||||
| 2) Install the dependencies: | ||||
| 
 | ||||
| <Tabs groupId="pm"> | ||||
| @ -111,5 +119,74 @@ npx pkg xlsx-cli.js | ||||
| 
 | ||||
| This generates `xlsx-cli-linux`, `xlsx-cli-macos`, and `xlsx-cli-win.exe` . | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="boxednode" label="boxednode"> | ||||
| 
 | ||||
| Run `boxednode`: | ||||
| 
 | ||||
| ```bash | ||||
| npx boxednode@2.0.1 -s xlsx-cli.js -t xlsx-cli | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
| </Tabs> | ||||
| 
 | ||||
| 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 | ||||
| ``` | ||||
| 
 | ||||
| ## 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: | ||||
| 
 | ||||
| - [ChakraCore](/docs/demos/engines/chakra) | ||||
| - [Duktape](/docs/demos/engines/duktape) | ||||
| - [Goja](/docs/demos/engines/goja) | ||||
| - [JavaScriptCore](/docs/demos/engines/jsc) | ||||
| - [QuickJS](/docs/demos/engines/quickjs) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user