Yve*_* M. 10 reactjs webpack webpack-html-loader
有没有办法直接在HTML入口点预生成(单个路由)React应用程序的HTML结构?
然后,在加载任何JS之前,页面将能够显示HTML(基于React初始状态).
我实际上正在使用webpack-html-loader,但欢迎任何其他加载器或插件;)
PS:可以使用static-site-generator-webpack-plugin吗?
PS:我没有使用React Router
如果你想使用static-site-generator-webpack-plugin,你首先需要使用webpack构建一个bundle,bundle.js
它导出一个带有以下参数的render函数.
locals
具有各种页面元数据的对象,例如title
,进入组件参数(传统上被认为是模板变量).callback
(err, result)
您将使用渲染的html作为值调用的nodejs样式回调result
例如
// entry.js, compiled to bundle.js by webpack
module.exports = function render(locals, callback) {
callback(null,
'<html>' + locals.greet + ' from ' + locals.path + '</html>');
};
Run Code Online (Sandbox Code Playgroud)
在此函数中,您将实例化组件(如果需要,可以通过React Router)并使用它们进行渲染ReactDOMServer.renderToString()
.
然后,您将指定编译bundle.js
为bundle
您的实例StaticSiteGeneratorPlugin
,以及在你的具体路线paths
,并在locals
包含上述提到的元数据值的对象.
var paths, locals; // compute paths from metadata files or frontmatter
module.exports = {
entry: {
bundle: './entry.js' // build bundle.js from entry.js source
},
...,
plugins: [
new StaticSiteGeneratorPlugin('bundle', paths, locals)
]
}
Run Code Online (Sandbox Code Playgroud)
您指定的键locals
在webpack.config.js
将存在于locals
每个调用的参数render(locals, callback)
.他们将被合并path
,assets
并webpackStats
通过插件提供的密钥.
如果你想在渲染后将javascript代码加载到你的页面中,你可以编译一个额外的page.js
条目到你的webpack配置,ReactDOM.render()
以典型的方式调用,然后将该包加载到script
你的render(locals, callback)
函数中发出的标记中bundle.js
(上图).确保将page.js
组件安装到DOM中与呈现时相同的位置entry.js
(您可能会id
在父元素上设置属性).您还需要确保任何位置(即路径路径)因变量在两个环境中都对齐.
查看Gatsby的源代码,该代码也使用此插件.您还可以查看Phenomic的源代码以获得替代方法.
归档时间: |
|
查看次数: |
2862 次 |
最近记录: |