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 未结束的字符串常量错误解决方法
Jun 13 Javascript
js简单实现删除记录时的提示效果
Dec 05 Javascript
JavaScript中的prototype和constructor简明总结
Apr 05 Javascript
HTML页面登录时的JS验证方法
May 28 Javascript
js自定义select下拉框美化特效
May 12 Javascript
对jQuary选择器的全面总结
Jun 20 Javascript
js转换对象为xml
Feb 17 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
Oct 24 Javascript
vue中element组件样式修改无效的解决方法
Feb 03 Javascript
浅析Vue中method与computed的区别
Mar 06 Javascript
Vue.js点击切换按钮改变内容的实例讲解
Aug 22 Javascript
如何解决webpack-dev-server代理常切换问题
Jan 09 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 if 想到的些问题
2008/03/22 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
php操作xml
2013/10/27 PHP
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
php求今天、昨天、明天时间戳的简单实现方法
2016/07/28 PHP
JS隐藏参数post传值实例
2013/04/18 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
bootstrap suggest下拉框使用详解
2017/04/10 Javascript
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
初步认识Python中的列表与位运算符
2015/10/12 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
对Python中plt的画图函数详解
2018/11/07 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
关键字final的用法
2013/10/02 面试题
写好求职信第一句话的技巧
2013/10/26 职场文书
仓库门卫岗位职责
2013/12/22 职场文书
产品生产计划书
2014/05/07 职场文书
幼儿发展评估方案
2014/06/11 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
单位收入证明范本
2015/06/18 职场文书
运动员入场前导词
2015/07/20 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
赞美教师的句子
2019/09/02 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
详细介绍python类及类的用法
2021/05/31 Python