grunt-react-renderize

0.2.0 • Public • Published

grunt-react-renderize

Render React components into Grunt config or files.

Getting Started

This plugin requires Grunt.

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-react-renderize --save-dev

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

grunt.loadNpmTasks('grunt-react-renderize');

The "react_renderize" task

Overview

This plugin allows you to render a React component from file into Grunt config or a file.

Rendering to a config value

Rendered value can be used with any template engine that allows providing data to templates through the config. For example let's assume you have a React module:

var React = require('react');
 
module.exports = React.createElement('p', null, 'I need this in my template.');

and a Jade template:

div!=prerenderedMarkup

The result, after providing 'jade.options.data.prerenderedMarkup' as a destination for the task, would be:

<div><p>I need this in my template.</p></div>

Rendering into a file

This, of course, outputs the result of the rendering to a file. The option renderToFile works best with the option banner if you are rendering a whole document - you can provide the doctype through it. So React module:

var React = require('react');
 
module.exports = React.createElement('body', null, 'I like to move it.');

with option renderToFile set to true and option banner set to '<!doctype html>' will result in a file with a content:

<!doctype html><body>I like to move it.</body>

Options

options.renderToFile

Type: Boolean Default value: false

When this option is set to true, the result will be rendered to a file instead of a Grunt config value. Since a config value name can be similar to a file name, this option is safer than any is-that-a-filename-or-not heuristics.

options.banner

Type: String Default: empty string

This string will be prepended to the beginning of the concatenated output. It is processed using grunt.template.process, using the default options.

(Default processing options are explained in the grunt.template.process documentation)

options.footer

Type: String Default: empty string

This string will be appended to the end of the concatenated output. It is processed using grunt.template.process, using the default options.

(Default processing options are explained in the grunt.template.process documentation)

options.removeReactAttrs

Type: Boolean Default value: true

If set to true, then data-react* attributes won't be present in the rendered markup (renderToStaticMarkup will be used instead of renderToString).

With no data-react* attributes React won't be able to reuse the rendered data in the browser and will replace innerHTML of the target container, which is not quite optimal.

The default value is set to true for backward compatibility and will be set to false in the next major release.

options.separator

Type: String Default value: empty string

Used as a separator when joining multiple rendered components.

Usage Example

This should render the component from a file into Grunt config.

grunt.initConfig({
  react_renderize: {
    files: {
      'template_engine.options.data.component': 'components/my_component.js',
    },
  },
})

The rendered component will be available through grunt.config.get('template_engine.options.data.component')).

Motivation

I wanted to prerender the React components and reuse them in Jade templates. This gives me the freedom to apply any filter to the rendered markup. The only way I knew to do this was by setting the Grunt config. Thus the plugin was born.

If you know of a better way to solve this problem, please contact me :)

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.

License

Copyright (c) 2014 FatFisz. Licensed under the MIT license.

Package Sidebar

Install

npm i grunt-react-renderize

Weekly Downloads

0

Version

0.2.0

License

MIT

Last publish

Collaborators

  • fatfisz