Git Product home page Git Product logo

aliv's Introduction

Build Status Coverage Status npm version

It's alive! It's alive! In the name of God! Now I know what it feels like to be God! ~Frankenstein

What?

Light, fast and powerful one liner live-reloading Node.js server.

From the simplest live-reloading server to complex apps that need compression, proxies, middlewares and HTTP/2 - aliv got you covered.

Install

Globally:

$ npm i -g aliv

Locally:

$ npm i --save-dev aliv

Why?

Some similar modules out there are not as easy to setup, to maintain, or to extend. This one was made on demand for web development, more specific, to Single Page Applications. No more silly bugs when refreshing deep routes and then getting 404'd.

aliv simplifies a lot of headache we have when developing complex web apps.

  • Proxy request/responses;
  • Automagically gzip the response of your server;
  • Use HTTP/2 by simply setting http2 to true;
  • Refresh all your connected browsers with each file change;
  • Run a bunch of middlewares before each browser reload if you feel like it;
  • Use less memory/CPU possible.

How?

You can choose the way to work with aliv: CLI (terminal), aliv.config.js (Node module), .alivrc (config file) or a local node module.

Go to the folder that contains the index.html file and run:

$ aliv

There you go, all running!

Oh, do you want some specific stuff? Checkout the available options. If you need help with something more specific, feel free to check the wiki.

Options

Head over to the wiki to see all the options

CLI

--version, --v                   display version (only available on the CLI)
--port, --p                      change port
--host, --h                      change the host name
--secure, --s                    use https/wss
--http2, --h2                    use the new and improved version of the HTTP protocol
--cors, --c                      respond to requests with CORS headers, use true or object to override defaults
--quiet, --q                     no logging whatsoever
--noBrowser, --nb                won't open the browser automagically
--only, --o                      will only watch for changes in the given path/glob/regex/array
--ignore, --ign                  won't watch for changes in the given path (regex)
--pathIndex, --pi                change the path to your index.html
--proxy, --px                    uses proxy
--proxyTarget, --pxt             the http/https server where the proxy will "redirect"
--proxyWhen, --pxw               when the proxy should be activated; like --pxw /api/*
--root, --ro                     set the root to a different folder, like "./src/my/deep/folder/"
--watch, --w                     choose to watch for files change or not
--static, --st                   choose what paths are going to be served
--reloadDelay, --rd              time (in ms) to delay the browser refresh
--redirectHttpToHttps, --rhh     redirect any http traffic to https
--insecurePort, --insPort        inform an insecure port

aliv.config.js

All the options being used on the CLI can be added to the aliv.config.js file, like this:

module.exports = {
  port: 9999,
  quiet: true,
  cors: {
    headers: "Content-Type, Custom-Header",
    methods: "GET, OPTIONS",
    credentials: false
  },
  pathIndex: "src/",
  only: ["src/**/*"],
  proxy: true,
  proxyWhen: ["/api/*", "/cqrs/*"],
  proxyTarget: ["http://my-other-server.com:1234", "http://my-cqrs-server.com:1234"]
}

By doing that, when running $ aliv, it'll get all the options in aliv.config.js and use it.

But, if you have such file and still use something like $ aliv --port 9999, the cli will have priority over the file.

.alivrc

All the options being used on the CLI can be added to the .alivrc file, like this:

{
  "port": 9999,
  "quiet": true,
  "cors": {
    "headers": "Content-Type, Custom-Header",
    "methods": "GET, OPTIONS",
    "credentials": false
  },
  "pathIndex": "src/",
  "only": ["src/**/*"],
  "proxy": true,
  "proxyWhen": ["/api/*", "/cqrs/*"],
  "proxyTarget": ["http://my-other-server.com:1234", "http://my-cqrs-server.com:1234"]
}

By doing that, when running $ aliv, it'll get all the options in .alivrc and use it.

But, if you have such file and still use something like $ aliv --port 9999, the cli will have priority over the file.

Node module

const Server = require('aliv');

// yes, that easy - now your browser will open
// and it'll be refreshed every time a file changes
new Server({quiet: true}).start();

Default values

--port                  is 1307
--host                  is 127.0.0.1
--secure                is false
--http2                 is false
--cors                  is false
--quiet                 is false
--only                  is ".", which means it'll watch everything
--ignore                see list full regex in lib/options.js
--noBrowser             is false, which means it'll always open the browser on start
--pathIndex             is "", which means it'll look for the index.html in the root
--proxy                 is false, which means it'll not look for another server to answer for the /api/, for example
--proxyTarget           is "", no server to be target
--proxyWhen             is "", and it's supposed to be set with something like /api/*
--root                  is process.cwd()
--watch                 is true
--static                is [root, root + "/path/to/your/index"]
--reloadDelay           is 0
--redirectHttpToHttps   is false
--insecurePort          is 80

Wiki

Check the wiki for examples, FAQ, available options, troubleshooting and more.

Contributing

I've got an idea!

Great, let's talk!

I want to contribute

Awesome!

First, I'd suggest you open an issue so we can talk about the changes to be made and suchs and then you can do whatever you want ๐Ÿ˜„

Also, there's the folder _fixture ready to be customized so you can try some stuff while modifying the code; just run npm start and have fun!

License

MIT

aliv's People

Contributors

ericmdantas avatar dependabot[bot] avatar doublesharp avatar shuunen avatar bernardbr avatar phillpassos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.