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 相关文章推荐
jQuery 使用手册(五)
Sep 23 Javascript
jQuery学习笔记之Helloworld
Dec 22 Javascript
JavaScript数据类型判定的总结笔记
Jul 31 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
Jun 23 Javascript
JS获取随机数和时间转换的简单实例
Jul 10 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
Oct 13 Javascript
jQuery Validate验证框架详解(推荐)
Dec 17 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
Dec 06 Javascript
Angular学习教程之RouterLink花式跳转
May 03 Javascript
vue实现未登录跳转到登录页面的方法
Jul 17 Javascript
vue+element实现打印页面功能
May 20 Javascript
layui实现数据分页功能(ajax异步)
Jul 27 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
hessian 在PHP中的使用介绍
2010/12/13 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
Yii快速入门经典教程
2015/12/28 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
使用ExtJS技术实现的拖动树结点
2010/08/05 Javascript
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
python生成随机密码或随机字符串的方法
2015/07/03 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
学生喝酒检讨书
2014/02/06 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
火锅店的活动方案
2014/08/15 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
社区志愿者活动方案
2014/08/18 职场文书
民族精神月活动总结
2014/08/28 职场文书
2015年消防工作总结
2015/04/24 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript
Python办公自动化之Excel(中)
2021/05/24 Python
JavaScript实现音乐播放器
2022/08/14 Javascript