Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    grunt-servepublic

    grunt-serve

    Starts a http server that can be called to run Grunt tasks and serve files.

    Getting Started

    This plugin requires Grunt ~0.4.0

    If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

    npm install grunt-serve --save-dev

    Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

    grunt.loadNpmTasks('grunt-serve');

    The "serve" task

    Overview

    This task allows you to create a http server that can be called to run Grunt tasks and serve files.

    Once the task is ran, The HTTP server can be accessed by loading the page http://localhost:9000/. This will show you your configured aliases as well as the files that can be access using this server.

    Here is a summary of how the server will behave:

    • Calls to / will display a page with some information (configures aliases, files that can be served, directory browsing, ...).
    • Calls to /task/{task1},{task2}/{output} will run the given tasks and return the file named output (see example later).
    • Calls to /{alias} ({alias} being an alias that you have configured) will run the tasks defined for that alias.
    • Calls did not match the rules above will try to return the content of a file for the given path (/index.html will return the file index.html located in the folder where grunt was launched).

    This project can also be found on https://www.npmjs.org/package/grunt-serve.

    Rebuild on browser refresh

    One possible usage of the plugin is triggering automatic build when you refresh a page in your browser. When developing a web project that uses a lot of JavaScript, you will find yourself losing lots of time switching to the command line, building the script, switching back to the browser, then pressing refresh to see the result. This plugin allows you to avoid switching to the command line. You simply need to replace the script in your html page by the local server that this task creates. Next time you refresh, the browser will call this local server that will run the grunt tasks you defined and will return the generated file.

    An easy way to setup this would be as follow:

        <!doctype html>
        <html>
            <head>
                <title>My Website</title>
                {{ if development }}
                    <!-- regenerated files -->
                    <link href="http://localhost:9000/client.css" rel="stylesheet" type="text/css" />
                    <script src="http://localhost:9000/client.js"></script> 
                {{ else if (production) }}
                    <!-- static files -->
                    <link href="client.css" rel="stylesheet" type="text/css" />
                    <script src="client.js"></script> 
                {{ endif }}
            </head>
            <body>
                <!-- page content -->
            </body>
        </html>

    Options

    options.port

    Type: Integer
    Default value: 9000

    The port that the server should be running on.

    options.aliases

    Type: Object
    Default value: null

    Aliases allows you to configure what tasks should be ran and what file should be returned for a specific path. In the following example, calling http://localhost:9000/client.js will trigger running the tasks 'html2js', 'concat' and 'minify'. When all the tasks have been executed the file client.min.js will be returned and the content type 'text/javascript' will be set in the headers. If no contentType if given, it will try to auto detect by looking at the output. If no output if given, the grunt stdout will be returned.

        'aliases': {
            'client.js': {
                tasks: ['html2js', 'concat', 'minify'], // required
                output: 'client.min.js', // optional
                contentType: 'text/javascript' // optional
            },
            ...
        }

    options.silently

    Type: Boolean
    Default value: false

    Controls whether or not to print the build logs in the terminal.

    options.serve

    Type: Object
    Default value: null

    Configuration of serve. The only thing configurable right now is the base path to serve. By default, if no path is specified, it will automatically serve the files in the grunt working directory. If you want another path to be served, you can either put a relative or absolute path as shown below. This will only affect the serve feature (aliases or /task output path will always be related to the grunt working directory).

        'serve': {
            'path': '/Users/user/Documents/workspace/project'
        }

    Usage Examples

    Basic Use - Running tasks with zero configuration

    In this example, grunt serve will start a web server at http://localhost:9000/. Any call to /task will trigger a build as described below.

    // Project configuration.
    grunt.initConfig({
        serve: {
            options: {
                port: 9000
            }
        }
    });

    Using Aliases

    In this example, grunt serve will start a web server at http://localhost:9000/.

    // Project configuration.
    grunt.initConfig({
        serve: {
            options: {
                port: 9000,
                'client.js': {
                    tasks: ['html2js', 'concat'],
                    output: 'client.js'
                }
            }
        }
    });

    Output logs

    In this example, grunt serve will start a web server at http://localhost:9000/.

    • If you go to http://localhost:9000/client.js it will execute the tasks 'html2js' and 'concat' and return the stdout and stderr that were outputed by grunt while running those tasks.
    // Project configuration.
    grunt.initConfig({
        serve: {
            options: {
                port: 9000,
                'client.js': {
                    tasks: ['html2js', 'concat'],
                    output: 'stdout'
                }
            }
        }
    });

    Serve files

    In this example, grunt serve will start a web server at http://localhost:9000/.

    If you are a request did not match any alias, the server will try to find a file matching the request path. For example if you load http://localhost:9000/pages/index.html (and no alias for 'pages/index.html' was configured) the server check if the file "pages/index.html" exists. If it does, it will return it. Otherwise it will return a 404 Not found page.

    // Project configuration.
    grunt.initConfig({
        serve: {
            options: {
                port: 9000
            }
        }
    });

    Release History

    • 2014-03-23 0.1.0 First Release
    • 2014-03-23 0.1.1 Minor improvements
    • 2014-03-24 0.1.2 Documentation changes
    • 2014-03-24 0.1.3 Improved URL parsing
    • 2014-09-16 0.1.4 Fixed unresponsive server issue
    • 2014-09-27 0.1.5 Added serves files and nicer pages
    • 2014-09-27 0.1.6 Bug fix and code refactoring.

    install

    npm i grunt-serve

    Downloadsweekly downloads

    655

    version

    0.1.6

    license

    none

    repository

    githubgithub

    last publish

    collaborators

    • avatar