response.require

Rex Javascript compiling for root

npm install response.require
1 downloads in the last month

response.require

response.require is a root plugin, for compiling Javascript files using rex. It adds one method response.require. Install using npm.

npm install response.require

Usage

response.require takes either a filename and an optional options object, or just the options object as first argument. The input can either be Javascript or HTML, and can be specified using options.html or options.js. When the input is determined to be HTML, either by checking the filename extension or options.html, all the script tags which have the type attribute set to text/require are extracted, joined and compiled using rex.

var fs = require('fs');
var root = require('root');
var responserequire = require('response.require');

var app = root();

app.use(responserequire, { /* options for rex */ });

app.get('/js/*', function(request, response) {
    // Return the compiled javascript file
    response.require(request.params.glob);
});

The module exposes an extra function which is mostly suited for development.

// Create a route and pass the script function
app.get('/require', responserequire.script);

In a HTML file add a script tag whos src attribute points at the route. The specified script tags are compiled and inserted into the document.

<!-- ./index.html -->
<html>
    <head>
        <title>response.require test</title>

        <script type="text/javascript" src="/require"></script>

        <!-- Type must be text/require, only script tags with that type will be compiled -->
        <script type="text/require">
            var mymodule = require('my-module');
            // Do something with mymodule
        </script>

        <script type="text/require">
            // Require more modules
        </script>
    </head>
    <body>
        Hello
    </body>
</html>

This is equivalent to doing the following on the server.

app.get('/route', function(request, response) {
    // Read the content of the HTML file
    fs.readFile('./index.html', function(err, content) {
        if(err) return response.error(err);

        response.setHeader('Content-Type', 'application/javascript');

        // Compile the script tags and return the result
        response.require({ html: conent });
    });
});

responserequire.script adds a more generic method of doing the above, which works with all HTML files, but requires multiple requests to the server.

npm loves you