@astropub/vite-plugin-file
Version:
A Vite plugin for seamless access to file metadata and data streams, supporting modern Web API interfaces like Blob, File, and ArrayBuffer
113 lines (76 loc) • 3.59 kB
Markdown
**vite-plugin-file** enables seamless access to file information and data in **[Vite](https://vite.dev)** projects.
[![NPM Version][npm-img]][npm-url]
[![NPM Downloads][dl-img]][dl-url]
- **Efficient File Handling**: Stream large files without consuming excess memory.
- **Convenient File Formats**: Work seamlessly with modern Web APIs.
- Work with large files efficiently via `ReadableStream`.
- Access the entire file as `ArrayBuffer`, `Blob`, or `File`.
- **Simple Metadata Access**: Retrieve critical file information with minimal effort.
- Retrieve file name, type, size, and last modified time.
- Access metadata as HTTP-style headers and preconfigured responses.
- **Vite Integration**: Built specifically for Vite, ensuring seamless integration.
- Includes automatic TypeScript typings for `?file` imports.
Install the plugin:
```shell
npm install @astropub/vite-plugin-file
```
Add the plugin to your Vite configuration file:
```js
// vite.config.js
import vitePluginFile from "@astropub/vite-plugin-file"
export default {
plugins: [vitePluginFile()]
}
```
Add the `?file` suffix to any file import to access its metadata and contents.
```js
import FaviconIco from "./assets/favicon.ico?file"
```
Retrieve basic metadata about any file.
```js
import FaviconIco from "./assets/favicon.ico?file"
console.log(FaviconIco.name) // "favicon.ico"
console.log(FaviconIco.type) // "image/x-icon"
console.log(FaviconIco.size) // 9608
console.log(FaviconIco.lastModified) // 1735689600000
```
Stream any file efficiently without loading it into memory.
```js
import FaviconIco from "./assets/favicon.ico?file"
const stream = FaviconIco.stream() // ReadableStream
const response = FaviconIco.response() // Response (with pre-configured headers)
```
Access the file as `ArrayBuffer`, `Blob`, or `File`.
```js
import FaviconIco from "./assets/favicon.ico?file"
const buffer = await FaviconIco.arrayBuffer()
console.log(buffer.byteLength) // 9608
const blob = await FaviconIco.blob()
console.log(blob.type) // "image/x-icon"
const file = await FaviconIco.file()
console.log(file.name) // "favicon.ico"
console.log(file.lastModified) // 1735689600000
```
Retrieve the file metadata as HTTP-style headers.
```js
import FaviconIco from "./assets/favicon.ico?file"
const headers = FaviconIco.headers()
console.log(headers.get("content-type")) // "image/x-icon"
console.log(headers.get("content-length")) // "9608"
console.log(headers.get("last-modified")) // "Wed, 01 Jan 2025 00:00:00 GMT"
```
Licensed under the [MIT-0 License](https://opensource.org/license/mit-0).
<br />
Enjoy!
[]: https://img.shields.io/npm/v/@astropub/vite-plugin-file?color=%23444&label=&labelColor=%23CB0000&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjE1MCAxNTAgNDAwIDQwMCIgZmlsbD0iI0ZGRiI+PHBhdGggZD0iTTE1MCA1NTBoMjAwVjI1MGgxMDB2MzAwaDEwMFYxNTBIMTUweiIvPjwvc3ZnPg==&style=for-the-badge
[]: https://www.npmjs.com/package/@astropub/vite-plugin-file
[]: https://www.npmjs.com/package/@astropub/vite-plugin-file
[]: https://img.shields.io/badge/dynamic/json?url=https://api.npmjs.org/downloads/point/last-week/@astropub/vite-plugin-file&query=downloads&label=⇓+week&color=%23444&labelColor=%23EEd100&style=for-the-badge