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 轻松支持函数重载 (Part 2 - 实现)
Aug 04 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
Apr 17 Javascript
javascript拖拽上传类库DropzoneJS使用方法
Dec 05 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
Mar 06 Javascript
JavaScript中使用Callback控制流程介绍
Mar 16 Javascript
利用JavaScript脚本实现滚屏效果的方法
Jul 07 Javascript
总结在前端排序中遇到的问题
Jul 19 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
Jan 05 Javascript
js实现拖拽上传图片功能
Aug 01 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
Nov 28 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
Jul 05 Javascript
koa中间件核心(koa-compose)源码解读分析
Jun 15 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中使用Imagick实现图像直方图的实现代码
2011/08/30 PHP
simplehtmldom Doc api帮助文档
2012/03/26 PHP
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
php笔记之:文章中图片处理的使用
2013/04/26 PHP
Javascript将string类型转换int类型
2010/12/09 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
2011/07/31 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
angularjs实现猜大小功能
2017/10/23 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
JSONObject与JSONArray使用方法解析
2020/09/28 Javascript
Python入门篇之编程习惯与特点
2014/10/17 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
Pandas之缺失数据的实现
2021/01/06 Python
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
会计专业毕业生自我鉴定
2013/10/29 职场文书
党员年终民主评议的自我评价
2013/11/05 职场文书
复核员上岗演讲稿
2014/01/05 职场文书
早会主持词
2014/03/17 职场文书
毕业生求职自荐书范文
2014/03/27 职场文书
交通事故调解协议书
2014/04/16 职场文书
2014年司法局工作总结
2014/12/11 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
好人好事新闻稿
2015/07/17 职场文书
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏