--- title: Bundling Sheets with ViteJS sidebar_label: ViteJS pagination_prev: demos/index pagination_next: demos/grid/index sidebar_position: 3 --- import current from '/version.js'; import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; [ViteJS](https://vitejs.dev/) is a modern build tool for generating static sites. [SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing data from spreadsheets. This demo uses ViteJS and SheetJS to export data. We'll explore how to add SheetJS to a site using ViteJS and how to export data to spreadsheets. :::info pass The [Vite section of the Content demo](/docs/demos/static/vitejs) covers asset loaders. They are ideal for static sites pulling data from sheets at build time. ::: :::note pass This demo focuses on integration details with the ViteJS bundler. The demos follow the ["Export Tutorial"](/docs/getting-started/examples/export), which covers SheetJS library usage in more detail. ::: :::note Tested Deployments This demo was tested in the following environments: | ViteJS | Date | |:---------|:-----------| | `5.4.10` | 2024-11-04 | | `4.5.5` | 2024-11-04 | | `3.2.11` | 2024-11-04 | ::: ## Integration Details [The "Frameworks" section](/docs/getting-started/installation/frameworks) covers installation with Yarn and other package managers. After installing the SheetJS module in a ViteJS project, `import` statements can load relevant parts of the library. ```js import { read, utils, writeFileXLSX } from 'xlsx'; ``` :::info pass ViteJS requires third-party libraries to provide additional `package.json` metadata. SheetJS library version 0.18.10 added the required metadata. It is strongly recommended to [upgrade to the latest version](/docs/getting-started/installation/frameworks) ::: ## Complete Example 1) Create a new ViteJS project: ```bash npm create vite@latest sheetjs-vite -- --template vue-ts cd sheetjs-vite npm i ``` 2) Add the SheetJS dependency: {`\ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} 3) Replace `src\components\HelloWorld.vue` with: ```html title="src\components\HelloWorld.vue" ``` 4) Start the development server: ```bash npm run dev ``` :::caution pass When this was last tested in ViteJS version 4, the process crashed with the error ``` Search string not found: "for (const existingRoot of buildInfoVersionMap.roots) {" ``` **This is a known issue with ViteJS 4 and its dependency tree!**[^1] The recommended workaround is to forcefully upgrade `vue-tsc`: ```bash npm i "vue-tsc@2" ``` ::: 5) Open a web browser to `http://localhost:5173/` and click the export button. 6) Build the production site: ```bash npx vite build ``` 7) Verify the new site by running a local web server in the `dist` folder: ```bash npx http-server dist ``` 8) Access the displayed URL (typically `http://localhost:8080`) in a web browser and click the export button. [^1]: See [issue 4484 in the `vuejs/language-tools` repository on GitHub](https://github.com/vuejs/language-tools/issues/4484) for the issue triage and workaround. This issue does not affect other ViteJS major versions.