Serve static site with useful features.
- Base on ExpressJS
- Written in Typescript
- Use serve-handler package to serve static assets
- Builtin middlewares:
- Authentication by token in header
- Basic Authentication
- Filter access by IP, netmask
- Log requests
- Proxy paths
- Use custom config file: in JS or JSON formats
- Generate init command
npm i -g serve-di
npm i serve-di
npx serve-di
Command | Description |
---|---|
serve |
Serve site |
init-config |
Init sample config |
Use serve-di serve
command to serve site.
serve-di serve
npx serve-di serve
As NPM script
{
"scripts": {
"start": "serve-di serve"
}
}
sserve-di/0.0.15
Usage:
$ serve-di
Commands:
init-config Init config file
serve [serveDir] Serve site
For more info, run any command with the `--help` flag:
$ serve-di --help
$ serve-di init-config --help
$ serve-di serve --help
Options:
-v, --version Display version number
-h, --help Display this message
serve-di/0.0.13
Usage:
$ serve-di serve [serveDir]
Options:
--config <file> Config file
--port <port> Listening port
--route-prefix <routePrefix> Route prefix
--verbose Print verbose logging
--noAuth Disable auth middlewares if exists in config file: basic auth and filter IP
-h, --help Display this message
import { Config, makeServer } from 'serve-di'
const port = process.env.PORT || 8080
const config: Config = {
// ...
}
makeServer(config).listen(port, () => {
console.log(`Listening at: http://localhost:${port}${config.routePrefix}`)
})
You can use custom file to config module, support JSON and JS config. Detail of each type of config file please see below sections.
Create serve-di.config.json
or serve-di.config.js
file at ROOT of your node app.
JS config file
const { defineConfig } = require('serve-di')
module.exports = defineConfig({
auth: [{ username: 'A', password: 'b' }],
serve: {
public: 'dist',
etag: true,
cleanUrls: true,
directoryListing: false,
trailingSlash: true,
},
logs: {
url: true,
config: true,
},
})
JS config file
{
"$schema": "https://raw.githubusercontent.com/madnh/serve-di/master/schema.json",
"auth": [{ "username": "A", "password": "B" }],
"serve": {
"public": "dist",
"etag": true,
"cleanUrls": true,
"directoryListing": false,
"trailingSlash": true
}
}
serve
field is config of serve-handler, refer to its config for
detail.
JSON config file only contains basic configs:
type JsonConfig = {
$schema?: string // Just link of JSON config schema file
port?: number
/**
* List of validated IP, support IPv4 only, can be range of IPv4.
* @example
* ['1.2.3.4', '2.3.4.5/27']
*/
validIps?: string[]
/**
* Basic Auth info
*/
auth?: Array<{
username: string
password: string
}>
proxies?: Record<`/${string}`, string>
serve?: ServeConfig
logs?: {
config?: boolean
url?: boolean
}
}
const config: Config = {
serve: {
public: 'dist',
etag: true,
cleanUrls: true,
directoryListing: false,
trailingSlash: true,
},
}
Use http-proxy-middleware to add proxy middleware.
Remember to install http-proxy-middleware
.
npm i http-proxy-middleware
Config:
const config: Config = {
proxies: {
'/api': {
target: 'https://api.site.com',
changeOrigin: true,
},
'/api2': 'http://localhost:3000/',
},
}
{
"proxies": {
"/api": "https://api.site.com",
"/api2": "http://localhost:3000/"
}
}
Prefer to its document for more detail.