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 相关文章推荐
js弹出层永远居中实现思路及代码
Nov 29 Javascript
js 数组操作之pop,push,unshift,splice,shift
Jan 29 Javascript
js控制页面的全屏展示和退出全屏显示的方法
Mar 10 Javascript
基于jquery实现左右按钮点击的图片切换效果
Jan 27 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
May 24 Javascript
arcgis for js 修改infowindow样式的方法
Nov 02 Javascript
Angular2数据绑定详解
Apr 18 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
Mar 07 Javascript
浅谈Vue render函数在ElementUi中的应用
Sep 06 Javascript
mockjs+vue页面直接展示数据的方法
Dec 19 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
Jun 11 Javascript
微信小程序实现图片选择并预览功能
Jul 25 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面向对象编程快速入门
2006/12/14 PHP
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
2019/10/22 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
Javascript动态创建div的方法
2015/02/09 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
TensorFlow索引与切片的实现方法
2019/11/20 Python
深入分析python 排序
2020/08/24 Python
html5菜单折纸效果
2014/04/22 HTML / CSS
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
自我鉴定范文
2013/11/10 职场文书
应届大学生简历中的自我评价
2014/01/15 职场文书
考试不及格的检讨书
2014/01/22 职场文书
冰淇淋开店创业计划书
2014/02/01 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
作文批改评语
2014/12/25 职场文书
入党培养人考察意见
2015/06/08 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android
MYSQL常用函数介绍
2022/05/05 MySQL
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python