You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

6.6 KiB

view on npm npm module downloads Build Status Coverage Status Dependency Status js-standard-style Join the chat at https://gitter.im/lwsjs/local-web-server

Requires node v8 or above. Upgraders, please read the release notes.

local-web-server

The modular web server for productive full-stack development.

Use this tool to:

  • Build any flavour of web application (static site, dynamic site with client or server-rendered content, Single Page App, Progessive Web App, Angular or React app etc.)
  • Prototype any CORS-enabled back-end service (e.g. RESTful HTTP API or Microservice using websockets, Server Sent Events etc.)
  • Monitor activity, analyse performance, experiment with caching strategies etc.
  • Build your own, personalised CLI web server tool

Features:

  • Modular, extensible and easy to personalise. Create, share and consume only plugins which match your requirements.
  • Powerful, extensible command-line interface (add your own commands and options)
  • HTTP, HTTPS and HTTP2 support (HTTP2 requires node v8.4.0 or above)
  • URL Rewriting to local or remote destinations
  • Single Page Application support
  • Response mocking
  • Configurable access log
  • Route blacklisting
  • HTTP Conditional and Range request support
  • Gzip response compression, HTTP Basic Authentication and much more

Synopsis

This package installs the ws command-line tool (take a look at the usage guide).

Static web site

The most simple use case is to run ws without any arguments - this will host the current directory as a static web site. Navigating to the server will render a directory listing or your index.html, if that file exists.

$ ws
Serving at http://mbp.local:8000, http://127.0.0.1:8000, http://192.168.0.100:8000

Single Page Application

Serving a Single Page Application (an app with client-side routing, e.g. a React or Angular app) is as trivial as specifying the name of your single page:

$ ws --spa index.html
Serving at http://mbp.local:8000, http://127.0.0.1:8000, http://192.168.0.100:8000

By default, requests for typical SPA paths (e.g. /user/1, /login) return 404 Not Found as a file at that location does not exist. By marking index.html as the SPA you create this rule:

If a static file is requested (e.g. /css/style.css) then serve it, if not (e.g. /login) then serve the specified SPA and handle the route client-side.

Read more.

URL rewriting and proxied requests

Another common use case is to re-route certain requests to a remote server if, for example, you'd like to use data from a different environment. The following command would proxy requests with a URL beginning with http://127.0.0.1:8000/api/ to https://internal-service.local/api/:

$ ws --rewrite '/api/* -> https://internal-service.local/api/$1'
Serving at http://mbp.local:8000, http://127.0.0.1:8000, http://192.168.0.100:8000

HTTPS

Launching a secure server is as simple as setting the --https flag. See the wiki for further configuration options and a guide on how to get the "green padlock" in your browser.

$ ws --https
Serving at https://mbp.local:8000, https://127.0.0.1:8000, https://192.168.0.100:8000

HTTP2

Uses node's built-in HTTP2 support. HTTP2 servers are always secure using local-web-server's built-in SSL certificates (by default) or those supplied by --cert, --key or --pfx. See the wiki for further info about HTTPS options and a guide on how to get the "green padlock" in your browser.

$ ws --http2
Serving at https://mbp.local:8000, https://127.0.0.1:8000, https://192.168.0.100:8000

Mock responses

Imagine the network is down or you're working offline, proxied requests to https://internal-service.local/api/users/1 would fail. In this case, Mock Responses can fill the gap. Mocks are defined in a module which can be reused between projects.

Trivial example - respond to a request for /rivers with some JSON. Save the following Javascript in a file named example-mocks.js.

module.exports = MockBase => class MockRivers extends MockBase {
  mocks () {
    return {
      route: '/rivers',
      responses: [
        {
          response: {
            type: 'json',
            body: [
              { name: 'Volga', drainsInto: 'Caspian Sea' },
              { name: 'Danube', drainsInto: 'Black Sea' },
              { name: 'Ural', drainsInto: 'Caspian Sea' },
              { name: 'Dnieper', drainsInto: 'Black Sea' }
            ]
          }
        }
      ]
    }
  }
}

Launch ws passing in your mocks module.

$ ws --mocks example-mocks.js
Serving at http://mbp.local:8000, http://127.0.0.1:8000, http://192.168.0.100:8000

GET your rivers.

$ curl http://127.0.0.1:8000/rivers
[
  {
    "name": "Volga",
    "drainsInto": "Caspian Sea"
  },
  {
    "name": "Danube",
    "drainsInto": "Black Sea"
  },
  {
    "name": "Ural",
    "drainsInto": "Caspian Sea"
  },
  {
    "name": "Dnieper",
    "drainsInto": "Black Sea"
  }
]

See the tutorials for more information and examples about mock responses.

Further Documentation

See the wiki for plenty more documentation and tutorials.

Install

Requires node v8 or above. Install the previous release for node >= v4.0.0.

$ npm install -g local-web-server

© 2013-19 Lloyd Brookes <75pound@gmail.com>. Documented by jsdoc-to-markdown.