/svr

HTTP development server done right

Primary LanguageCSSMIT LicenseMIT


svr

svr

Last version Build Status Dependency status Dev Dependencies Status NPM Status

HTTP development server done right.

Features

  • Smart reload, just reloading modified files to do development fast.
  • Reload on demand, after type rs on your terminal.
  • Pretty Errors, making unexpected errors easy to read.
  • Port Selection, supporting detection for already in use ports.
  • Clipboard Support, copying the local address in your clipboard.
  • Debug in Your Network, exposing the process in your local network.

It's similar micro-dev, but compatible with any function that exposes req, res interface (micro, express, koa, hapi, fastify, etc).

Installation

$ npm install svr --save

Usage

Defining entry point

Create a file and export a function that accepts the standard http.IncomingMessage and http.ServerResponse objects, that means, the exported function should be receive req, res:

const express = require('express')
const { Router } = express
const router = Router()

// define middlewares
router.use(require('helmet')())
router.use(require('compression')())
router.use(require('cors')())

// define routes
router.get('/', (req, res) => res.status(204).send())
router.get('/robots.txt', (req, res) => res.status(204).send())
router.get('/favicon.txt', (req, res) => res.status(204).send())

// expose router
module.exports = router

After that, just call svr:

$ svr

svr is assuming you have a main file declared in your package.json in the project directory. Also, you can provide it as first argument:

$ svr index.js

We recommend setup svr as npm script:

{
  "scripts": {
    "dev": "svr"
  }
}

Now, running npm run dev it will be start your HRM development server:

$ npm start

  ┌───────────────────────────────────────────────────┐
  │                                                   │
  │   my-express-api is running!                      │
  │                                                   │
  │   • Local:            http://localhost:3000       │
  │   • On Your Network:  http://192.168.1.106:3000   │
  │                                                   │
  └───────────────────────────────────────────────────┘

You can type svr --help to see all the options.

Smart Reload

When a file is modified in the project directory, svr will reload just the modified file:

  ┌───────────────────────────────────────────────────┐
  │                                                   │
  │   my-express-api is running!                      │
  │                                                   │
  │   • Local:            http://localhost:3000       │
  │   • On Your Network:  http://192.168.1.106:3000   │
  │                                                   │
  └───────────────────────────────────────────────────┘

   ℹ 18:32:42 modified index.js

Also, svr takes into consideration files that can be ignored:

  • Well known files to ignore, like node_modules, .git, etc.
  • .gitignore declarations.
  • ignored field in your package.json.

If you need to add a specific file to ignore, use i or --ignore flag:

$ svr -i .cache -i public

Also, you can use -w or --watch to add more file path to be listened. You can declare:

  • Relative or absolute paths.
  • Glob patterns.

Reload on demand

In any moment you can refresh the process typing rs in the terminal window where svr is running:

  ┌───────────────────────────────────────────────────┐
  │                                                   │
  │   my-express-api is running!                      │
  │                                                   │
  │   • Local:            http://localhost:3000       │
  │   • On Your Network:  http://192.168.1.106:3000   │
  │                                                   │
  └───────────────────────────────────────────────────┘

   ℹ 18:32:42 modified index.js
   rs
   ℹ 18:34:07 restart index.js

Don't use on production

svr is oriented just for development scenarios, not for production.

Under production, simply create the server you need based on your necessities, for example, let's create a bin/server as production server:

#!/usr/bin/env node

'use strict'

const express = require('express')

const app = express()

require('./index')(app, express)

const port = process.env.PORT || process.env.port || 3000
const { name } = require('../package.json')

app.listen(port, function () {
  console.log(`${name} is running at http://localhost:${port}`)
})

You can declare it as npm start script:

{
  "scripts": {
    "dev": "svr",
    "start": "bin/server"
  }
}

That's all.

License

svr © Kiko Beats, released under the MIT License.
Authored and maintained by Kiko Beats with help from contributors.

kikobeats.com · GitHub Kiko Beats · Twitter @Kikobeats