Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sondr3/astro-compressor

A gzip and brotli compressor for Astro
https://github.com/sondr3/astro-compressor

Last synced: about 1 month ago
JSON representation

A gzip and brotli compressor for Astro

Awesome Lists containing this project

README

        

astro-compressor



GitHub Actions Status
npm version


A gzip and brotli compressor for Astro

- **Simple**: Set it and forget it
- **Optimal**: By compressing ahead of time, a more performant compression can be performed

Table of Contents

## Table of Contents

- [Quickstart](#quickstart)
- [NOTE](#NOTE)
- [Usage](#usage)
- [Configuration](#configuration)
- [License](#license)

# NOTE

1. **Important:** It is vital that this is the last integration in the `integrations`
property. Otherwise some files might not get compressed.
2. **Note:** This only works for static exports, SSR does not export assets that can
be compressed ahead of time so you need to solve it with middleware. See [this](https://github.com/sondr3/astro-compressor/issues/13#issuecomment-1739721634)
for more context and a partial solution.

# Quickstart

Install via your tool of choice:

```sh
# Using NPM
npx astro add astro-compressor
# Using Yarn
yarn astro add astro-compressor
# Using PNPM
pnpm astro add astro-compressor
```

Then, restart the dev server by typing `CTRL-C` and then `npm run dev` in the terminal window that was running Astro.

# Usage

First, install the package with your favorite package manager: `pnpm add --dev astro-compressor`,
then configure it in your `astro.config.*` file in the `integrations` property:

```js
import { defineConfig } from "astro/config";
import compressor from "astro-compressor";

export default defineConfig({
// ...
integrations: [..., compressor()],
});
```

## Configuration

You can also optionally enable and/or disable either the gzip or brotli compression by
passing an options object to the compressor:

```js
import { defineConfig } from "astro/config";
import compressor from "astro-compressor";

export default defineConfig({
// ...
integrations: [..., compressor({ gzip: true, brotli: false })],
});
```

Or customize the file formats that will be compressed:

```js
import { defineConfig } from "astro/config";
import compressor from "astro-compressor";

export default defineConfig({
// ...
integrations: [..., compressor({
fileExtensions: [".html"] // only compress HTML files
})],
});
```

By default the `fileExtensions` array is `[".css", ".js", ".html", ".xml", ".cjs", ".mjs", ".svg", ".txt"]`.

# License

MIT.