NextJS Static demo refresh
This commit is contained in:
parent
67294eeeae
commit
a5e01f9476
@ -53,8 +53,26 @@ Typically, some users will create a spreadsheet with source data that should be
|
||||
loaded into the site. This sheet will have known columns. For example, "Name"
|
||||
and "Index" are used in [`pres.xlsx`](https://docs.sheetjs.com/pres.xlsx):
|
||||
|
||||
<table>
|
||||
<thead><tr><th>Spreadsheet</th><th>State</th></tr></thead>
|
||||
<tbody><tr><td>
|
||||
|
||||
![`pres.xlsx` data](pathname:///pres.png)
|
||||
|
||||
</td><td>
|
||||
|
||||
```js
|
||||
[
|
||||
{ Name: "Bill Clinton", Index: 42 },
|
||||
{ Name: "GeorgeW Bush", Index: 43 },
|
||||
{ Name: "Barack Obama", Index: 44 },
|
||||
{ Name: "Donald Trump", Index: 45 },
|
||||
{ Name: "Joseph Biden", Index: 46 }
|
||||
]
|
||||
```
|
||||
|
||||
</td></tr></tbody></table>
|
||||
|
||||
This naturally maps to an array of typed objects, as in the TS example below:
|
||||
|
||||
```ts
|
||||
@ -71,18 +89,6 @@ const data = utils.sheet_to_json<President>(wb.Sheets[wb.SheetNames[0]]);
|
||||
console.log(data);
|
||||
```
|
||||
|
||||
`data` will be an array of objects:
|
||||
|
||||
```js
|
||||
[
|
||||
{ Name: "Bill Clinton", Index: 42 },
|
||||
{ Name: "GeorgeW Bush", Index: 43 },
|
||||
{ Name: "Barack Obama", Index: 44 },
|
||||
{ Name: "Donald Trump", Index: 45 },
|
||||
{ Name: "Joseph Biden", Index: 46 }
|
||||
]
|
||||
```
|
||||
|
||||
A component will typically map over the data. The following example generates
|
||||
a TABLE with a row for each President:
|
||||
|
||||
@ -135,9 +141,9 @@ function exportFile() {
|
||||
|
||||
This demo was tested in the following environments:
|
||||
|
||||
| Svelte | ViteJS | Date |
|
||||
|:--------|:--------|:-----------|
|
||||
| `4.2.8` | `5.0.5` | 2023-12-04 |
|
||||
| SvelteJS | ViteJS | Date |
|
||||
|:---------|:---------|:-----------|
|
||||
| `4.2.18` | `5.2.13` | 2024-06-07 |
|
||||
|
||||
:::
|
||||
|
||||
@ -235,9 +241,9 @@ function exportFile() {
|
||||
|
||||
This demo was tested in the following environments:
|
||||
|
||||
| Svelte | ViteJS | Date |
|
||||
|:--------|:--------|:-----------|
|
||||
| `4.2.8` | `5.0.5` | 2023-12-04 |
|
||||
| SvelteJS | ViteJS | Date |
|
||||
|:---------|:---------|:-----------|
|
||||
| `4.2.18` | `5.2.13` | 2024-06-07 |
|
||||
|
||||
:::
|
||||
|
||||
|
@ -47,8 +47,19 @@ This demo was tested in the following environments:
|
||||
|
||||
| ESBuild | Date |
|
||||
|:----------|:-----------|
|
||||
| `0.14.14` | 2023-12-04 |
|
||||
| `0.19.8` | 2023-12-04 |
|
||||
| `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 |
|
||||
|
||||
:::
|
||||
|
||||
|
@ -36,13 +36,13 @@ time and how to read files on the server in NextJS lifecycle methods.
|
||||
NextJS collects telemetry by default. The `telemetry` subcommand can disable it:
|
||||
|
||||
```js
|
||||
npx next@13.5.6 telemetry disable
|
||||
npx -y next@13.5.6 telemetry disable
|
||||
```
|
||||
|
||||
The setting can be verified by running
|
||||
|
||||
```js
|
||||
npx next@13.5.6 telemetry status
|
||||
npx -y next@13.5.6 telemetry status
|
||||
```
|
||||
|
||||
:::
|
||||
@ -75,12 +75,26 @@ This demo was tested in the following environments:
|
||||
|
||||
| NextJS | NodeJS | Date |
|
||||
|:----------|:----------|:-----------|
|
||||
| ` 9.5.5` | `16.20.2` | 2023-12-04 |
|
||||
| `10.2.3` | `16.20.2` | 2023-12-04 |
|
||||
| `11.1.4` | `16.20.2` | 2023-12-04 |
|
||||
| `12.3.4` | `20.10.0` | 2023-12-04 |
|
||||
| `13.5.6` | `20.10.0` | 2023-12-04 |
|
||||
| `14.0.3` | `20.10.0` | 2023-12-04 |
|
||||
| ` 9.5.5` | `16.20.2` | 2024-06-07 |
|
||||
| `10.2.3` | `16.20.2` | 2024-06-07 |
|
||||
| `11.1.4` | `16.20.2` | 2024-06-07 |
|
||||
| `12.3.4` | `20.14.0` | 2024-06-07 |
|
||||
| `13.5.6` | `20.14.0` | 2024-06-07 |
|
||||
| `14.2.3` | `20.14.0` | 2024-06-07 |
|
||||
|
||||
:::
|
||||
|
||||
:::info pass
|
||||
|
||||
SheetJS libraries work in legacy NextJS apps. Older versions of this demo have
|
||||
been tested against versions `3.2.3`, `4.2.3`, `5.1.0`, `6.1.2` and `7.0.3`.
|
||||
|
||||
NextJS has made a number of breaking changes over the years. Older versions of
|
||||
NextJS use legacy versions of ReactJS that do not support function components
|
||||
and other idioms.
|
||||
|
||||
[`examples/reactjs-legacy`](https://git.sheetjs.com/examples/reactjs-legacy) on
|
||||
the SheetJS git server includes code samples for legacy NextJS versions.
|
||||
|
||||
:::
|
||||
|
||||
@ -554,13 +568,13 @@ When upgrading NextJS is not an option, NodeJS should be downgraded to v16.
|
||||
0) Disable NextJS telemetry:
|
||||
|
||||
```js
|
||||
npx next@13.5.6 telemetry disable
|
||||
npx -y next@13.5.6 telemetry disable
|
||||
```
|
||||
|
||||
Confirm it is disabled by running
|
||||
|
||||
```js
|
||||
npx next@13.5.6 telemetry status
|
||||
npx -y next@13.5.6 telemetry status
|
||||
```
|
||||
|
||||
1) Set up folder structure. At the end, a `pages` folder with a `sheets`
|
||||
@ -583,7 +597,7 @@ curl -LO https://docs.sheetjs.com/next/sheetjs.xlsx
|
||||
|
||||
:::note pass
|
||||
|
||||
The `next@13.5.6` dependency can be adjusted to pick a different version. For
|
||||
The `next@13.5.6` depefndency can be adjusted to pick a different version. For
|
||||
example, NextJS `12.3.4` is installed with
|
||||
|
||||
<CodeBlock language="bash">{`\
|
||||
@ -699,6 +713,13 @@ As explained in the summary, the `/getStaticPaths` and `/getStaticProps` routes
|
||||
are completely static. 2 `/sheets/#` pages were generated, corresponding to 2
|
||||
worksheets in the file. `/getServerSideProps` is server-rendered.
|
||||
|
||||
:::info pass
|
||||
|
||||
NextJS historically used lowercase Lambda (`λ`) to denote dynamic paths. This
|
||||
was changed to a stylized lowercase F (`ƒ`) in recent versions of NextJS.
|
||||
|
||||
:::
|
||||
|
||||
9) Try to build a static site:
|
||||
|
||||
<Tabs groupId="nextver">
|
||||
@ -741,7 +762,13 @@ This build will fail. A static page cannot be generated at this point because
|
||||
|
||||
### Static Site
|
||||
|
||||
10) Delete `pages/getServerSideProps.js` and rebuild:
|
||||
10) Delete `pages/getServerSideProps.js`:
|
||||
|
||||
```bash
|
||||
rm -f pages/getServerSideProps.js
|
||||
```
|
||||
|
||||
11) Rebuild the static site:
|
||||
|
||||
<Tabs groupId="nextver">
|
||||
<TabItem value="13" label="NextJS 9 - 13">
|
||||
@ -758,17 +785,16 @@ module.exports = {
|
||||
webpack: (config) => {
|
||||
```
|
||||
|
||||
After editing `next.config.js`:
|
||||
After editing `next.config.js`, run the build command:
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
```bash
|
||||
rm -f pages/getServerSideProps.js
|
||||
npx next build
|
||||
```
|
||||
|
||||
Inspecting the output, there should be no lines with the `λ` symbol:
|
||||
Inspecting the output, there should be no lines with `λ` or `ƒ`:
|
||||
|
||||
```
|
||||
Route (pages) Size First Load JS
|
||||
@ -782,7 +808,7 @@ Route (pages) Size First Load JS
|
||||
└ /sheets/1
|
||||
```
|
||||
|
||||
11) Generate the static site:
|
||||
12) Generate the static site:
|
||||
|
||||
<Tabs groupId="nextver">
|
||||
<TabItem value="13" label="NextJS 9 - 13">
|
||||
@ -814,7 +840,7 @@ npx next build
|
||||
|
||||
The static site will be written to the `out` subfolder
|
||||
|
||||
12) Serve the static site:
|
||||
13) Serve the static site:
|
||||
|
||||
```bash
|
||||
npx http-server out
|
||||
@ -825,16 +851,16 @@ testing the generated site. Note that `/getServerSideProps` will 404 since the
|
||||
page was removed.
|
||||
|
||||
[^1]: See the ["Webpack" asset module demo](/docs/demos/static/webpack) for more details.
|
||||
[^2]: See [`read` in "Reading Files"](/docs/api/parse-options)
|
||||
[^2]: See [`read` in "Reading Files"](/docs/api/parse-options).
|
||||
[^3]: See ["SheetJS Data Model"](/docs/csf/) for more details.
|
||||
[^4]: See [`sheet_to_json` in "Utilities"](/docs/api/utilities/array#array-output)
|
||||
[^5]: See [`readFile` in "Reading Files"](/docs/api/parse-options)
|
||||
[^6]: See [`sheet_to_json` in "Utilities"](/docs/api/utilities/array#array-output)
|
||||
[^4]: See [`sheet_to_json` in "Utilities"](/docs/api/utilities/array#array-output).
|
||||
[^5]: See [`readFile` in "Reading Files"](/docs/api/parse-options).
|
||||
[^6]: See [`sheet_to_json` in "Utilities"](/docs/api/utilities/array#array-output).
|
||||
[^7]: See [`getStaticProps`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-props) in the NextJS documentation.
|
||||
[^8]: See [`getStaticPaths`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-paths) in the NextJS documentation.
|
||||
[^9]: See [`getServerSideProps`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props) in the NextJS documentation.
|
||||
[^10]: See [`fallback` in getStaticPaths](https://nextjs.org/docs/pages/api-reference/functions/get-static-paths#fallback-false) in the NextJS documentation.
|
||||
[^11]: See [`sheet_to_html` in "Utilities"](/docs/api/utilities/html#html-table-output)
|
||||
[^12]: [`dangerouslySetInnerHTML`](https://react.dev/reference/react-dom/components/common#common-props) is a ReactJS prop supported for all built-in components.
|
||||
[^13]: See [`sheet_to_json` in "Utilities"](/docs/api/utilities/array#array-output)
|
||||
[^14]: See ["Array of Objects" in the ReactJS demo](/docs/demos/frontend/react#rendering-data)
|
||||
[^13]: See [`sheet_to_json` in "Utilities"](/docs/api/utilities/array#array-output).
|
||||
[^14]: See ["Array of Objects" in the ReactJS demo](/docs/demos/frontend/react#rendering-data).
|
||||
|
@ -190,7 +190,7 @@ Deno.writeFileSync(out_file, new TextEncoder().encode(csv));`}
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
This was last tested by SheetJS users on 2023 December 04.
|
||||
This was last tested by SheetJS users on 2024 June 07.
|
||||
|
||||
:::
|
||||
|
||||
|
55
tests/bundler-esbuild.sh
Executable file
55
tests/bundler-esbuild.sh
Executable file
@ -0,0 +1,55 @@
|
||||
#!/bin/bash
|
||||
# https://docs.sheetjs.com/docs/demos/frontend/bundler/esbuild
|
||||
cd /tmp
|
||||
rm -rf sheetjs-esbrowser
|
||||
|
||||
mkdir sheetjs-esbrowser
|
||||
cd sheetjs-esbrowser
|
||||
npm init -y
|
||||
|
||||
npm i --save https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz
|
||||
curl -LO https://docs.sheetjs.com/esbuild/esbrowser.js
|
||||
curl -LO https://docs.sheetjs.com/esbuild/esbnode.js
|
||||
|
||||
cat >index.html <<EOF
|
||||
<body><script src="esb.browser.js"></script></body>
|
||||
EOF
|
||||
|
||||
cat >test.js <<EOF
|
||||
const puppeteer = require('puppeteer');
|
||||
const express = require('express');
|
||||
const app = express();
|
||||
app.use(express.static('./'));
|
||||
app.listen(7262, async() => {
|
||||
await new Promise((res,rej) => setTimeout(res, 1000));
|
||||
const browser = await puppeteer.launch();
|
||||
const page = await browser.newPage();
|
||||
page.on("console", msg => console.log("PAGE LOG:", msg.text()));
|
||||
await page.setViewport({width: 1920, height: 1080});
|
||||
const client = await page.target().createCDPSession();
|
||||
await client.send('Browser.setDownloadBehavior', {
|
||||
behavior: 'allow',
|
||||
downloadPath: require("path").resolve('./')
|
||||
});
|
||||
page.on('request', req => console.log(req.url()));
|
||||
await page.goto('http://localhost:7262/');
|
||||
await new Promise((res,rej) => setTimeout(res, 1000));
|
||||
await browser.close();
|
||||
process.exit();
|
||||
});
|
||||
EOF
|
||||
|
||||
for n in 0.9.7 0.10.2 0.11.23 0.12.29 0.13.15 0.14.54 0.15.18 0.16.17 0.17.19 0.18.20 0.19.12 0.20.2 0.21.4; do
|
||||
npx -y esbuild@$n --version
|
||||
|
||||
## Browser Test
|
||||
npx -y esbuild@$n esbrowser.js --bundle --outfile=esb.browser.js
|
||||
node test.js
|
||||
npx -y xlsx-cli Presidents.xlsx | head -n 3
|
||||
rm -f esb.browser.js Presidents.xlsx
|
||||
|
||||
npx -y esbuild@$n esbnode.js --bundle --platform=node --outfile=esb.node.js
|
||||
node esb.node.js
|
||||
npx -y xlsx-cli Presidents.xlsx | head -n 3
|
||||
rm -f esb.node.js Presidents.xlsx
|
||||
done
|
Loading…
Reference in New Issue
Block a user