zacanger/koa-simple-static

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Koa Simple Static

Simple caching static file server for Koa

[![ko-fi](https://img.shields.io/badge/donate-KoFi-yellow.svg)](https://ko-fi.com/zacanger) [![Support with PayPal](https://img.shields.io/badge/paypal-donate-yellow.png)](https://paypal.me/zacanger)

--------

Similar to koa-static-cache, but with different options, better API,
and in TypeScript.

Features:

* Caches: preloads files and dynamically loads new ones if found
* Falls back to `/index.html` if available
* Gzips if request's `accept-encoding` includes gzip
* Accepts extra headers for served files

## Installation

```
npm i koa-simple-static
```

## Usage

```javascript
app.use(serve({
  dir: process.cwd()
}))
```

### Options

* `dir: string` — directory you want to serve
* `maxAge?: number = 0` — cache control max age (in seconds)
* `extraHeaders?: Object[]` — any extra headers you wish to set for requests served by this module
  * The format for this is `[ { 'Link': '</foo.js>; rel=preload; as=script' }, { 'Set-Cookie': 'foo=bar; path=/;' } ]`

### Example

```javascript
import serve from 'koa-simple-static'
import { resolve } from 'path'
import Koa from 'koa'

const app = new Koa()
const port = process.env.PORT || 4444

app.use(serve({
  dir: resolve(__dirname, 'public'),
  extraHeaders: [ { 'X-Something-Whatever': 'foo, bar' } ]
}))

app.listen(port, () => {
  console.log(`Serving on ${port}!`)
})
```

**Important** if you're using `require`, you'll need to
`require('koa-simple-static').default`.

## FAQ

* How is this different from other options?
  * Before this module, you could have a static file server for Koa with good
    defaults that didn't cache, or one that did cache with weird defaults (like
    not falling back to `index.html`). Now, you can have the good parts of both.
* I'm getting errors but my code is fine?
  * How old is your version of Node? You'll need to be on the versions supported
    in the `engines` field, or else Babelify or otherwise compile your server.

## Contributing

* Issues and PRs are welcome! Please keep in mind that this is feature complete.
* This project uses TypeScript. It will be easiest if your editor is configured to
  work with `eslint` and `tsc`.
* Please run tests!
* If you're changing or adding functionality, please _add_ tests!

[LICENSE](./LICENSE.md)