摘要:然而配合服务器的实现局部刷新,同时更新端的代码并非易事。如下介绍一种可行的实施方案适用于可有可无。如果在开发模式下,有更完善的服务器渲染热加载的解决方案,欢迎大家积极贡献
原文链接
前言
hot reload分析
react静态资源热加载分析
react服务器配置分析
待解决
总结
前言由react客户端渲染的前端界面配合webpack-dev-server, react-hot-loader很容易实现前端开发过程中的局部刷新。然而配合node服务器的react-isomorphic实现局部刷新,同时更新client, server端的代码并非易事。
如下介绍一种可行的实施方案:
hot reload分析 react静态资源热加载分析适用于 koa2, react-hot-loader3, react-router可有可无。
Demo代码地址:https://github.com/lanjingling0510/blog/tree/master/react-isomorphic-hot-example
react静态资源的热加载配置并不复杂。webpack-dev-server负责重新编译代码,react-hot-loader负责热加载。
Note:webpack-dev-server也可以用开一个express服务器配合webpack-dev-middleware和webpack-hot-middleware中间件实现
配置webpack.client-dev.js:
plugins: [ new webpack.HotModuleReplacementPlugin() ] // ... entry: [ "react-hot-loader/patch", "webpack-dev-server/client?http://127.0.0.1:8080", "webpack/hot/only-dev-server", "./src/client/home", // 入口路径 ]
修改babel配置文件
"plugins": [ "react-hot-loader/babel" ]
修改入口文件
import React from "react"; import ReactDOM from "react-dom"; // 共享的组件页面 import Home from "../shared/page/Home"; // 热加载组件 import ReactHotLoader from "../shared/component/ReactHotLoader"; const container = document.getElementById("react-container"); function renderApp(TheApp) { ReactDOM.render(react服务器配置分析, container ); } renderApp(Home); // 下面的代码用来支持我们热加载应用 if (__DEV__ && module.hot) { // 接受这个文件的修改用来热加载 module.hot.accept("./home.js"); // 应用任何的改变将造成热加载,重新渲染。 module.hot.accept( "../shared/page/Home", () => renderApp(require("../shared/page/Home").default) ); }
开发模式下,server端的配置比较复杂,需要考虑的事情如下:
监听server代码的变动。
需要重新编译server代码
重新开启server服务器,并保证require最新的server代码
保证server端口按需开关,不冲突
监听server代码
// 监听server文件的变化,如果被修改则调用compileHotServer const watcher = chokidar.watch([ path.resolve(__dirname, "../src"), path.resolve(__dirname), ], {ignored: path.resolve(__dirname, "../src/client")}); watcher.on("ready", () => { watcher .on("add", compileHotServer) .on("addDir", compileHotServer) .on("change", compileHotServer) .on("unlink", compileHotServer) .on("unlinkDir", compileHotServer); });
关闭所有与客户端的连接,关闭server服务器,重新编译server代码
// 关闭所有连接,关闭服务器,重新编译 function compileHotServer() { compiling ++; // listenerManager实例包含当前web服务器对象和客户端连接的socket集合 if (listenerManager) { listenerManager.dispose(true).then(runCompiler); } else { runCompiler(); } } // webpack重新编译 function runCompiler() { compiler.run(() => undefined); }
重新开启server服务器
// server代码编译完成 // 开启server服务器 compiler.plugin("done", stats => { compiling --; if (compiling !== 0) return; if (stats.hasErrors()) { console.log(stats.toString()); return; } console.log("? ? Build server bundle done."); // 确保新的server bundles 代码不在module cache当中 Object.keys(require.cache).forEach((modulePath) => { if (modulePath.indexOf(compiler.options.output.path) !== -1) { delete require.cache[modulePath]; } }); try { const listener = require(compiledOutputPath).default; listenerManager = new ListenerManager(listener, "server"); } catch (err) { console.log(err); } });待解决
. react-router包含的页面组件更新后,提示[react-router] You cannot change
通过以上配置,可以实现修改代码后,实现server和client代码的更新以及hot reload。
代码开发过程中,需要开启两个端口,分别用来提供client端静态资源的编译和后台的server。
如果在开发模式下,有更完善的react isomoriphic服务器渲染热加载的解决方案,欢迎大家积极贡献 ?
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/80746.html
摘要:配置之后端渲染年已经占据前端的主流不得不承认这也是前端的未来发展方向但是后端渲染的开发方式仍然很常见不管是个人项目还是商业项目后端渲染搞起来真是糙猛快但是借着前端发展的东风后端渲染也有很大的改进空间这里就介绍一下我自己的实践经验前后端不分离 webpack配置之后端渲染2017年, vue, react, angular 已经占据前端的主流, 不得不承认这也是前端的未来发展方向. 但是...
摘要:的作用在文档中是这么说的给下级组件中的提供可用的的对象。这个文件里的主要是被方法引入,并传给的,算是一个默认的。表示当前的名称。这个值表示在里面的值。便于控制,同时某些不需要渲染的,也不会造成渲染。 注:这篇文章只是讲解React Redux这一层,并不包含Redux部分。Redux有计划去学习,等以后学习了Redux源码以后再做分析注:代码基于现在(2016.12.29)React ...
摘要:这也成为了一些开发者跨入移动开发大门的第一道小门槛。目前已经知道了调试设置中和。 React Native(以下简称RN)为传统前端开发者打开了一扇新的大门。其中,使用浏览器的调试工具去Debug移动端的代码,无疑是最吸引开发人员的特性之一。 试想一下,当你在手机屏幕按下一个按钮,处理事件的代码就可以立即在浏览器的调试工具里进行断点调试,而且每当你对代码进行修改,界面便可以完成快速地重...
摘要:译者按最近依旧如火如荼相信大家都跃跃欲试我们团队也开始在领域有所尝试年应该是逐渐走向成熟的一年让我们一起来看看国外的开发者们都总结了哪些最佳实践年在全世界都有很多关于新的更新和开发者大会的讨论关于去年的重要事件请参考那么年最有趣的问题来了我 译者按:最近React(web/native)依旧如火如荼,相信大家都跃跃欲试,我们团队也开始在React领域有所尝试. 2016年应该是Reac...
阅读 1352·2021-11-22 09:34
阅读 1361·2021-09-22 14:57
阅读 3376·2021-09-10 10:50
阅读 1318·2019-08-30 15:54
阅读 3667·2019-08-29 17:02
阅读 3452·2019-08-29 12:54
阅读 2587·2019-08-27 10:57
阅读 3303·2019-08-26 12:24