npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

srv-cli

v0.4.1

Published

A modern, opinionated and simple microservices stack built on Express.

Downloads

47

Readme

▼srv

A modern, opinionated and simple microservices stack built on Express.

npm-version dependencies Build Status Build status Coverage Status Greenkeeper badge

Why?

Creating services using the microservices architecture pattern can involve a lot of repeated boilerplate code including server, logging, documentation, transpilation and other middleware.

srv helps combine the common boilerplate code, while allowing you to extend as needed.

Features

  • Minimal CLI + Framework over Express
  • Babel Transpilation
  • Logging
  • RESTful Documentation Generation
  • CORS
  • Linting (eslint)

Included Modules

  • Express — Minimalist web framework
  • Babel — Javascript Transpilation.
  • Winston Logging — A multi-transport async logging library for node.js.
  • apiDoc — Inline Documentation for RESTful web APIs.
  • ESLint — Linting utility.
  • dotenv — Environment variables.

Install

$ npm install -g srv-cli
$ srv --help

or local (without bin symlink):

$ npm install srv-cli --no-bin-links
$ node node_modules/srv-cli/build/srv --help

Example

Create hello.js with a default export:

export default function hello(app) {
    app.get('/hello', (req, res) => {
        res.send("Hello world!");
    })
}

The express context will be passed into the default export, giving you full access to the express API. No need to write any express boilerplate code.

You can run the application directly with srv:

$ srv hello.js

▼ Babel transpiled.
▼ Ready! Listening on: http://0.0.0.0:3000

Any ES2015 code will automatically be transpiled (via babel), then served at the default host + port. See the CLI Reference for more options and features.

CLI Reference

$ srv --help
Usage: srv entrypoint.js [options]

Options:

  -h, --help            output usage information
  -V, --version         output the version number
  -p, --port [n]        Port to listen on
  -H, --host [value]    Host to listen on
  -D, --docs [value]    Generate Docs from folder
  -L, --lint            Lint code with ESLint
  -n, --no-babel        Skip Babel transformation
  -C, --config [value]  Configuration file

Generating Documentation

RESTful documentation generation is based on apiDoc params. See example/hello.js for an example.

Run the following command to generate documentation:

$ srv entrypoint.js --docs examples

examples - Generate Docs from folder.

View docs at: http://0.0.0.0:3000/docs

Refer to http://apidocjs.com/#params for supported apiDoc params.

Babel/ES6

By default, srv will transpile the entrypoint file (via babel) its dependencies with the preset-env preset. No need to setup babel yourself, it works out of the box!

See https://babeljs.io/docs/plugins/preset-env/ for supported plugins loaded by preset-env.

You can disable the transpilation by providing the --no-babel flag.

Logging

Winston logging transport is enabled by default and will log all http info logs to logs/ and all console debug logs to stdout.

You can also call the logging instance directly via the express.logger context.

See examples/hello.js for an example.

CORS

CORS middleware is enabled for all requests by default (via express-cors)

You can configure whitelisted domains in the default configuration.

Configuration

Configuration defaults are set on default.json. You can add, extend or override these defaults by creating your own configuration file (as json) and use the --config flag when running srv.

$ srv examples/hello.js --config custom.json

This will use default.json as a base config and extend using your provided configuration.

Environment Variables

srv uses dotenv to load environment varaibles from a .env file into process.env.

Just create a .env file in the root directory of your project. Add environment-specific variables on new lines in the form of NAME=VALUE. For example:

DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3

That's it.

process.env now has the keys and values you defined in your .env file.

db.connect({
  host: process.env.DB_HOST,
  username: process.env.DB_USER,
  password: process.env.DB_PASS
});

This makes it easy for development, but it is not recommended to add your .env files into VCS.

Linting

srv uses ESLint to lint your code using the airbnb-base config.

To eslint your code, just use the --lint flag:

$ srv examples/hello.js --lint

If you wish to update the default profile, you can set lint options on your custom configuration.

  "lint": {
    "rules": {
        "extends": "airbnb-base",
    }
  }

Adding Middleware

Adding extra middleware is easy. Simply export a middleware function in your entrypoint file containing your middleware loaders.

Example:

export function middleware(app) {
  app.use(awesomeMiddleware);
  app.use(anotherMiddleware);
}

See examples/middleware-example.js for an example.

Contributing

See: CONTRIBUTING.md

Change Log

See: CHANGELOG.md

License

See: LICENSE