webpack配置之后端渲染详解


Posted in Javascript onOctober 26, 2017

webpack配置之后端渲染2017年, vue, react, angular 已经占据前端的主流, 不得不承认这也是前端的未来发展方向. 但是后端渲染的开发方式仍然很常见, 不管是个人项目还是商业项目, 后端渲染搞起来真是糙猛快. 但是借着前端发展的东风, 后端渲染也有很大的改进空间. 这里就介绍一下我自己的实践经验: 前后端不分离的情况下实现热加载以及一定程度下的前端主导开发. 这里以koa为例, 但是仓库里也有django版. 理论上所有语言都可以实现. 有兴趣可以看下, 仓库地址在文末.

效果图

webpack配置之后端渲染详解

原理

原理说起来还是很简单的:

1、独立启动静态资源服务器打包生成资源列表(manifest)

通过webpack-manifest-plugin插件生成manifest.json文件

new ManifestPlugin({
  writeToFileEmit: true,
  publicPath: 'http://localhost:5000/static/'
})

文件结果如图:

webpack配置之后端渲染详解

服务器读取资源列表加载到模板文件中

app.use(async (ctx, next) => {
 const manifest = await fs.readFile(path.resolve(__dirname, 'assets/bundles/manifest.json'))
 ctx.state = {
  static: JSON.parse(manifest.toString())
 }
 await next()
})

这个中间件通过读去manifest.json将资源列表挂载到ctx.state(模板变量)中, 之后就可以直接在模板中引用静态资变量了

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>{{ title }}</title>
 <link rel="stylesheet" href="{{static['test.css']}}" rel="external nofollow" >
</head>
<body>
 <h1>Hello, World</h1>
 
 <script src="{{static['test.js']}}"></script>
</body>
</html>

需要注意的是由于后端渲染的一般是多入口, 所以只需要在对应的模板中引入需要的入口文件.

热加载

热加载其实也有很多解决方案: browsersync, live reload 等等, 但是这些都是full reload 只是减少了f5的频率, webpack的热加载就方便很多了通过websocket(具体我也不清楚), 配置起来也很简单.

在入口文件中加上

hot: 'webpack/hot/only-dev-server',
devServerClient: 'webpack-dev-server/client?http://0.0.0.0:5000'

/**
完整版
entry: {
  index: './assets/index.js',
  test: './assets/test.js',
  hot: 'webpack/hot/only-dev-server',
  devServerClient: 'webpack-dev-server/client?http://0.0.0.0:5000'
},
*/

插件中加上: new webpack.HotModuleReplacementPlugin()

需要注意的有两点:

  1. extract-text-webpack-plugin 加上之后就无法hot reload, 开发配置不要加上这个插件
  2. 根据webpack的文档, 每个入口文件都需要加上下面一段代码才能实现 js的hot reload
if (module.hot) {
 module.hot.accept()
}

完整配置和代码这里就不贴了, 仓库地址(django部分代码在master分支): https://github.com/xiadd/wepack-mutipage

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 强制类型转换函数
May 17 Javascript
Jquery实现视频播放页面的关灯开灯效果
May 27 Javascript
JQuery调用WebServices的方法和4个实例
May 06 Javascript
javascript中expression的用法整理
May 13 Javascript
NODE.JS跨域问题的完美解决方案
Oct 20 Javascript
jQuery插件ajaxFileUpload使用详解
Jan 10 Javascript
Javascript基础回顾之(二) js作用域
Jan 31 Javascript
教你快速搭建Node.Js服务器的方法教程
Mar 30 Javascript
JS的函数调用栈stack size的计算方法
Jun 24 Javascript
vue展示dicom文件医疗系统的实现代码
Aug 27 Javascript
详解用JS添加和删除class类名
Mar 25 Javascript
JsonServer安装及启动过程图解
Feb 28 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
Oct 26 #jQuery
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
Oct 26 #Javascript
node文字生成图片的示例代码
Oct 26 #Javascript
vue-cli中打包图片路径错误的解决方法
Oct 26 #Javascript
javascript+html5+css3自定义弹出窗口效果
Oct 26 #Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
Oct 26 #Javascript
JS手机端touch事件计算滑动距离的方法示例
Oct 26 #Javascript
You might like
php 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
2020/07/18 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
Python学习教程之常用的内置函数大全
2017/07/14 Python
python: line=f.readlines()消除line中\n的方法
2018/03/19 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
Python 定义只读属性的实现方式
2020/03/05 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
90后毕业生的求职信范文
2013/09/21 职场文书
新郎新娘婚礼答谢词
2014/01/11 职场文书
医学专业大学生求职信
2014/07/12 职场文书
公安四风对照检查材料思想汇报
2014/10/11 职场文书
社区党的群众路线教育实践活动总结材料
2014/10/31 职场文书
门卫岗位职责
2015/02/09 职场文书
普通员工辞职信范文
2015/05/12 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书