An expressjs middleware, to compress and stream static files. Support brotli
and gzip
compression (if brotli is enabled, and user's browser also support, brotli use be used)
Table of contents:
- Usage example
- Installation
- Usage Details
- License (MIT)
- [Changelog][5-changelog]
- Question and Feedback
// import using require
const serveStatic = require("express-stream-compressed-static")
// import in ES6
import serveStatic from "express-stream-compressed-static";
import path from "path"
// ... your express app
// const app = Express();
// Should be the first
app.use("/static", serveStatic(path.join(__dirname, "../path-to-static-dir")))
// Or with options
app.use("/static", serveStatic(path.join(__dirname, "../path-to-static-dir"), {
enableBrotli: boolean,
cacheControl: {
maxAge: numbe,
noTransform: boolean,
public: boolean,
additionalValue: string
}
}))
express-stream-compressed-static
is available on npmjs, and can be install via npm
or yarn
as following (without $
ofcourse):
# with npm
$ npm i express-stream-compressed-static --save
# with yarn
$ yarn add express-stream-compressed-static
serveStatic(path: string, options: StaticHandlerOptions) => Function: Get the middleware handler to compress and stream static files
-
path
: path to the static directory -
options
: seeStaticHandlerOptions
below
type StaticHandlerOptions
-
enableBrotli {boolean}
: enable brotli compress when client's browser supported.true
by default. -
cacheControl {StaticHandlerCacheOptions | optional}
: cache control options -
cacheCompressedFiles {boolean | StaticHandlerCacheCompressedFilesOptions}
: cache compressed files to avoid re-compress files
type StaticHandlerCacheOptions
-
maxAge {number}
: addmax-age
to cache control options (in seconds) -
noTransform {boolean}
: addno-transform
to cache control options -
public {boolean}
: addpublic
to cache control options -
additionalValue {string}
: add this value to cache control options *For example, whenmaxAge
,noTransform
andpublic
is set, result will beCache-Control: max-age=xxxx, no-transform, public
type StaticHandlerCacheCompressedFilesOptions
-
savePath {string}
: specify where the cache files will be stored. Otherwise, it will store file in same directory as the original file -
excludeQueryString {boolean}
: save compressed file name without queryString (false
by default). For example, your file url ispath/bundle.js?v=0.0.1
and using brotli compression, when the value totrue
, the filename will besave-path/bundle.js.br
. Otherwise, the filename will besave-path/bundle.js?v=0.0.1.br
MIT
- [0.0.2] added
options.cacheCompressedFiles
- [0.0.1] publish inital version
Feel free to start a thread for question, or feedback.