This is the documentation for the next version. For the previous release, see the prev branch. To install this prerelease: $ npm i -g local-web-server@^1.0.0-beta
local-web-server
A simple web-server for productive front-end development.
Requires node v4.0.0 or higher.
Synopsis
For the examples below, we assume we're in a project directory looking like this:
.
├── css
│ └── style.css
├── index.html
└── package.json
All paths/routes are specified using express syntax. To run the example projects linked below, clone the project, move into the example directory specified, run ws.
Static site
Fire up your static site on the default port:
$ ws
serving at http://localhost:8000
Single Page Application
You're building a web app with client-side routing, so mark index.html as the SPA.
$ ws --spa index.html
By default, typical SPA urls (e.g. /user/1, /login) would return 404 Not Found as a file does not exist with that path. By marking index.html as the SPA you create this rule:
If a static file at the requested path exists (e.g. /css/style.css) then serve it, if it does not (e.g. /login) then serve the specified SPA and handle the route client-side.
Access Control
By default, access to all files is allowed (including dot files). Use --forbid to establish a blacklist:
$ ws --forbid '*.json' '*.yml'
serving at http://localhost:8000
URL rewriting
Your application requested /css/style.css but it's stored at /build/css/style.css. To avoid a 404 you need a rewrite rule:
$ ws --rewrite '/css/style.css -> /build/css/style.css'
Or, more generally (matching any stylesheet under /css):
$ ws --rewrite '/css/:stylesheet -> /build/css/:stylesheet'
With a deep CSS directory structure it may be easier to mount the entire contents of /build/css to the /css path:
$ ws --rewrite '/css/* -> /build/css/$1'
this rewrites /css/a as /build/css/a, /css/a/b/c as /build/css/a/b/c etc.
Proxied requests
If the to URL contains a remote host, local-web-server will act as a proxy - fetching and responding with the remote resource.
Mount the npm registry locally:
$ ws --rewrite '/npm/* -> http://registry.npmjs.org/$1'
Map local requests for repo data to the Github API:
$ ws --rewrite '/:user/repos/:name -> https://api.github.com/repos/:user/:name'
Stored config
Use the same port and blacklist every time? Persist it to package.json:
{
"name": "example",
"version": "1.0.0",
"local-web-server": {
"port": 8100,
"forbid": "*.json"
}
}
or .local-web-server.json
{
"port": 8100,
"forbid": "*.json"
}
local-web-server will merge and use all config found, searching from the current directory upward. In the case both package.json and .local-web-server.json config is found in the same directory, .local-web-server.json will take precedence. Command-line options take precedence over all.
To inspect stored config, run:
$ ws --config
Logging
By default, local-web-server outputs a simple, dynamic statistics view. To see traditional web server logs, use --log-format:
$ ws --log-format combined
serving at http://localhost:8000
::1 - - [16/Nov/2015:11:16:52 +0000] "GET / HTTP/1.1" 200 12290 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2562.0 Safari/537.36"
The format value supplied is passed directly to morgan. The exception is --log-format none which disables all output.
Other usage
Debugging
Prints information about loaded middleware, arguments, remote proxy fetches etc.
$ ws --verbose
Compression
Serve gzip-compressed resources, where applicable
$ ws --compress
Disable caching
Disable etag response headers, forcing resources to be served in full every time.
$ ws --no-cache
mime-types
You can set additional mime-type/extension mappings, or override the defaults by setting a mime value in the stored config. This value is passed directly to mime.define(). Example:
{
"mime": {
"text/plain": [ "php", "pl" ]
}
}
Log Visualisation
Instructions for how to visualise log output using goaccess, logstalgia or gltail here.
Install
Ensure node.js is installed first. Linux/Mac users may need to run the following commands with sudo.
$ npm install -g local-web-server
This will install the ws tool globally. To see the available options, run:
$ ws --help
Distribute with your project
The standard convention with client-server applications is to add an npm start command to launch the server component.
1. Install the server as a dev dependency
$ npm install local-web-server --save-dev
2. Add a start command to your package.json:
{
"name": "example",
"version": "1.0.0",
"local-web-server": {
"port": 8100,
"forbid": "*.json"
},
"scripts": {
"start": "ws"
}
}
3. Document how to build and launch your site
$ npm install
$ npm start
serving at http://localhost:8100
API Reference
localWebServer([options]) ⇒ KoaApplication ⏏
Returns a Koa application you can launch or mix into an existing app.
Kind: Exported function
Params
- [options]
object- options- [.static]
object- koa-static config- [.root]
string= "."- root directory - [.options]
string- options
- [.root]
- [.serveIndex]
object- koa-serve-index config- [.path]
string= "."- root directory - [.options]
string- options
- [.path]
- [.forbid]
Array.<string>- A list of forbidden routes, each route being an express route-path. - [.spa]
string- specify an SPA file to catch requests for everything but static assets. - [.log]
object- morgan config- [.format]
string- log format - [.options]
object- options
- [.format]
- [.compress]
boolean- Serve gzip-compressed resources, where applicable - [.mime]
object- A list of mime-type overrides, passed directly to mime.define() - [.rewrite]
Array.<rewriteRule>- One or more rewrite rules - [.verbose]
boolean- Print detailed output, useful for debugging
- [.static]
Example
const localWebServer = require('local-web-server')
localWebServer().listen(8000)
localWebServer~rewriteRule
The from and to routes are specified using express route-paths
Kind: inner typedef of localWebServer
Properties
| Name | Type | Description |
|---|---|---|
| from | string |
request route |
| to | string |
target route |
Example
{
"rewrite": [
{ "from": "/css/*", "to": "/build/styles/$1" },
{ "from": "/npm/*", "to": "http://registry.npmjs.org/$1" },
{ "from": "/:user/repos/:name", "to": "https://api.github.com/repos/:user/:name" }
]
}
© 2015 Lloyd Brookes 75pound@gmail.com. Documented by jsdoc-to-markdown.