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 字符串与数组转换函数[不用split与join]
Dec 13 Javascript
原生js实现模拟滚动条
Jun 15 Javascript
JavaScript简单修改窗口大小的方法
Aug 03 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
Feb 14 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
May 03 Javascript
Jq通过td获取同行其它列td的方法
Oct 05 Javascript
JavaScript无阻塞加载和defer、async详解
Feb 26 Javascript
简单谈谈require模块化jquery和angular的问题
Jun 23 jQuery
Angular2 组件交互实例详解
Aug 24 Javascript
用Vue.js方法创建模板并使用多个模板合成
Jun 28 Javascript
javascript自定义日期比较函数用法示例
Jul 22 Javascript
如何用Node.js编写内存效率高的应用程序
Apr 30 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 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
php下使用curl模拟用户登陆的代码
2010/09/10 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
表格 隔行换色升级版
2009/11/07 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
javascript正则匹配汉字、数字、字母、下划线
2014/04/10 Javascript
jQuery知识点整理
2015/01/30 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
Python标准库之sqlite3使用实例
2014/11/25 Python
Python守护进程(daemon)代码实例
2015/03/06 Python
举例讲解Python中装饰器的用法
2015/04/27 Python
python保存字符串到文件的方法
2015/07/01 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
Python中selenium实现文件上传所有方法整理总结
2017/04/01 Python
Django中间件实现拦截器的方法
2018/06/01 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
python和opencv构建运动检测器的实现
2021/03/03 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
常用的HTML5列表标签
2017/06/20 HTML / CSS
四年级下册教学反思
2014/02/01 职场文书
大学生未来职业生涯规划书
2014/02/15 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
党员个人自我评价
2015/03/03 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python