Bundling Sheets with ESBuild
ESBuild is a fast module bundler for JavaScript. It combines scripts and libraries into simple scripts for browsers and NodeJS.
SheetJS is a JavaScript library for reading and writing data from spreadsheets.
This demo uses ESBuild and SheetJS to export data. We'll explore two workflows:
-
"Browser" explores how to import SheetJS libraries in a script and bundle with ESBuild for browser use.
-
"NodeJS" explores how to import SheetJS libraries in a script and bundle with ESBuild for NodeJS use.
The ESBuild section of the Content demo covers loaders. They are ideal for static sites pulling data from sheets at build time.
This demo focuses on integration details with the ESBuild bundler.
The demos follow the "Export Tutorial", which covers SheetJS library usage in more detail.
This demo was tested in the following environments:
ESBuild | Date |
---|---|
0.21.4 | 2024-06-07 |
0.20.2 | 2024-06-07 |
0.19.12 | 2024-06-07 |
0.18.20 | 2024-06-07 |
0.17.19 | 2024-06-07 |
0.16.17 | 2024-06-07 |
0.15.18 | 2024-06-07 |
0.14.54 | 2024-06-07 |
0.13.15 | 2024-06-07 |
0.12.29 | 2024-06-07 |
0.11.23 | 2024-06-07 |
0.10.2 | 2024-06-07 |
0.9.7 | 2024-06-07 |
Integration Details
The "Frameworks" section covers installation with Yarn and other package managers.
Browser
ESBuild will bundle the SheetJS ECMAScript Module build:
import { read, utils, writeFileXLSX } from 'xlsx';
The xlsx.mjs
source file uses a subset of ES6 that esbuild
understands and
is able to transpile for older browsers.
Assuming the primary source file is in.js
, the following command will bundle
the script and generate out.js
:
npx -y [email protected] in.js --bundle --outfile=out.js
Browser Demo
- Prepare a blank project:
mkdir sheetjs-esbrowser
cd sheetjs-esbrowser
npm init -y
- Install the tarball using a package manager:
- npm
- pnpm
- Yarn
npm i --save https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz
pnpm install --save https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz
yarn add https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz
- Download
esbrowser.js
and move to the project folder:
curl -LO https://docs.sheetjs.com/esbuild/esbrowser.js
- Create a small HTML page that loads the script. Save to
index.html
:
<body><script src="esb.browser.js"></script></body>
- Create bundle:
npx -y [email protected] esbrowser.js --bundle --outfile=esb.browser.js
- Start a local HTTP server:
npx http-server .
Access the displayed URL (typically http://localhost:8080
) with a web browser.
It should attempt to download Presidents.xlsx
NodeJS
ESBuild will bundle the SheetJS ECMAScript Module build:
import { read, utils, write } from 'xlsx';
To read and write files on the local filesystem using the SheetJS readFile
and
writeFile
methods1, the fs
module must be manually added:
import { set_fs, readFile } from 'xlsx';
import * as fs from 'fs';
set_fs(fs);
/* read pres.numbers in the same directory as the script */
const wb = readFile("pres.numbers");
Assuming the primary source file is in.js
, the following command will bundle
the script for NodeJS and generate out.js
:
npx -y [email protected] in.js --bundle --platform=node --outfile=out.js
NodeJS Demo
This demo script uses fetch
and requires Node 18+.
- Prepare a blank project:
mkdir sheetjs-esbnode
cd sheetjs-esbnode
npm init -y
- Install the tarball using a package manager:
- npm
- pnpm
- Yarn
npm i --save https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz
pnpm install --save https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz
yarn add https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz
- Download
esbnode.js
and move to the project folder:
curl -LO https://docs.sheetjs.com/esbuild/esbnode.js
- Create bundle:
npx -y [email protected] esbnode.js --bundle --platform=node --outfile=esb.node.js
- Run the bundle:
node esb.node.js
The process will generate Presidents.xlsx
in the project directory. Open the
file in a spreadsheet editor.