使用webpack反应静态站点
React static site with webpack
我正试图按照本教程创建一个静态网站http://jxnblk.com/writing/posts/static-site-generation-with-react-and-webpack/
我当前收到以下错误:ReferenceError中的error错误:文档未定义
这是我的app.jsx文件:
import React from 'react';
import ReactDOM from 'react-dom';
import { Router } from 'react-router';
import routes from './config/routes';
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
}
}
render() {
return (
<Router>{routes}</Router>
);
}
}
export default App;
module.exports = function render(locals, callback) {
var html = React.renderToStaticMarkup(React.createElement(App, locals))
callback(null, '<!DOCTYPE html>' + html)
}
路线:
import React from 'react';
import { Route, IndexRoute } from 'react-router';
import Layout from '../components/layout';
import Home from '../components/home';
export default (
<Route path="/" component={Layout}>
<IndexRoute component={Home} />
</Route>
);
layout.jsx组件:
import React from 'react';
import Nav from './nav';
import Footer from './footer';
import Styles from '../styles.scss';
class Layout extends React.Component {
constructor(props) {
super(props);
this.state = {
}
}
render() {
return (
<div id="layout" className={Styles.main}>
<Nav />
{this.props.children}
<Footer />
</div>
)
}
}
Layout.PropTypes = {
children: React.PropTypes.object.isRequired
}
export default Layout;
和我的webpack.config.js文件:
/* eslint-disable */
var path = require('path'),
webpack = require('webpack'),
autoprefixer = require('autoprefixer'),
OpenBrowserPlugin = require('open-browser-webpack-plugin');
StaticSiteGeneratorPlugin = require('static-site-generator-webpack-plugin');
data = require('./data');
var configServe = {
port: 9100,
};
module.exports = {
devServer: {
hot: true,
inline: true,
historyApiFallback: true,
progress: true,
port: configServe.port,
},
entry: [
'webpack/hot/dev-server',
'webpack-dev-server/client?http://localhost:' + configServe.port,
path.resolve(__dirname, './src/app.jsx'),
],
output: {
path: __dirname,
filename: './dist/bundle.js',
libraryTarget: 'umd'
},
module: {
loaders: [
{
// JSX files :
test: /'.js[x]?$/,
include: path.resolve(__dirname, 'src'),
exclude: /node_modules/,
loader: 'babel-loader?presets[]=es2015&presets[]=react',
},
{
// CSS files :
test: /'.css?$/,
include: path.resolve(__dirname, 'src'),
loader: 'style-loader!css-loader!postcss-loader',
},
{
// SCSS files :
test: /'.scss?$/,
include: path.resolve(__dirname, 'src'),
loader: 'style-loader!css-loader!postcss-loader!sass',
},
{
test: /'.(png|jpg)$/,
include: path.resolve(__dirname, 'src'),
loader: 'file-loader'
},
{
test: /'.svg$/,
loader: 'svg-inline'
}
],
},
postcss: [
autoprefixer({ browsers: ['last 3 versions'] }),
],
plugins: [
// Avoid publishing files when compilation fails
new StaticSiteGeneratorPlugin('./dist/bundle.js', data.routes, data),
new webpack.NoErrorsPlugin(),
new webpack.HotModuleReplacementPlugin(),
new OpenBrowserPlugin({ url: 'http://localhost:' + configServe.port }),
],
resolve: {
extensions: ['', '.js', '.jsx'],
},
stats: {
// Nice colored output
colors: true,
},
// Create Sourcemaps for the bundle
devtool: 'source-map',
};
希望有人能帮我解决这个问题。我想最终以一种非固执己见的方式将这一切捆绑在一起,用React创建静态网页并在github上发布。
我想这一行导致了错误:
var html = React.renderToStaticMarkup(React.createElement(Root, locals))
您正在使用一些Root
组件,但从您的代码中得出结论,它没有定义。此外,它在教程中也由以下行定义(您已经指出):var Root = require('./components/Root.jsx')
相关文章:
- 如何处理10页以上的静态页眉/页脚
- Grunt-connect在根目录之外提供静态文件
- 来自文档或下一个静态父级的事件委派
- JavaScript滚动脚本-在测试中激发,而不是在开发站点上
- JavaScript命名约定;静态“;类或模块
- 无法理解JavaScript中的静态方法
- 通过iframe登录到远程站点
- 使用主干网和rails的静态页面路由
- 使用webpack反应静态站点
- 如何缓存包含 1890000 个页面的动态站点并将其静态托管在 AWS 上
- 使用 Greasemonkey 将文本更改为图像(在静态站点上)
- 静态站点与使用公共火炉的快递
- 在node.js中构建静态站点
- 如何在不复制数据的情况下在站点中的页面之间共享静态数据
- 从Confluence XML或HTML生成可搜索的可移植静态HTML站点
- 在静态站点上使用URL's中的参数
- 从客户端JavaScript生成的站点生成静态HTML
- 如何在静态站点上动态呈现社交分享按钮的元标签
- Heroku静态站点切换到新页面时不加载页面数据
- 我的脚本在wordpress静态站点中不起作用