Skip to content

Instantly share code, notes, and snippets.

@cesarandreu
Created April 20, 2015 19:44
Show Gist options
  • Select an option

  • Save cesarandreu/2cca3430b62de1c50e22 to your computer and use it in GitHub Desktop.

Select an option

Save cesarandreu/2cca3430b62de1c50e22 to your computer and use it in GitHub Desktop.
Webpack render html
var React = require('react')
var Html = React.createClass({
propTypes: {
assets: React.PropTypes.object.isRequired
},
render () {
var {scripts, styles} = this.props.assets
return (
<html lang="en">
<head>
<meta charSet='utf-8' />
<meta httpEquiv='X-UA-Compatible' content='IE=edge,chrome=1'/>
<base href='/'/>
<meta name='viewport'
content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' />
<title></title>
{styles.map((href, key) =>
<link href={href} key={key} rel='stylesheet'></link>
)}
</head>
<body>
<div id='td-console'></div>
{scripts.map((src, key) =>
<script src={src} key={key}></script>
)}
</body>
</html>
)
}
})
module.exports = Html
var fs = require('fs'),
path = require('path'),
React = require('react'),
Html = require('./Html.jsx')
module.exports = function render (stats) {
var assets = {scripts: [], styles: []}
if (typeof stats.assetsByChunkName.app === 'string')
stats.assetsByChunkName.app = [stats.assetsByChunkName.app]
stats.assetsByChunkName.app
.filter(asset => !asset.indexOf('app'))
.forEach(asset => {
switch (path.extname(asset)) {
case '.js':
assets.scripts.push(`${stats.publicPath}${asset}`)
break
case '.css':
assets.styles.push(`${stats.publicPath}${asset}`)
break
}
})
var publicRoot = path.resolve(__dirname, '../public')
var html = React.renderToStaticMarkup(<Html assets={assets}/>)
fs.writeFileSync(`${publicRoot}/index.html`, `<!DOCTYPE html>${html}`)
fs.writeFileSync(`${publicRoot}/stats.json`, JSON.stringify(stats))
}
var render = require('./render')
module.exports = function StatsPlugin (publicPath) {
return function () {
this.plugin('done', saveStats)
}
function saveStats (stats) {
var jsonStats = stats.toJson()
render(jsonStats)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment