资讯专栏INFORMATION COLUMN

webpack配置之后端渲染

wing324 / 1217人阅读

摘要:配置之后端渲染年已经占据前端的主流不得不承认这也是前端的未来发展方向但是后端渲染的开发方式仍然很常见不管是个人项目还是商业项目后端渲染搞起来真是糙猛快但是借着前端发展的东风后端渲染也有很大的改进空间这里就介绍一下我自己的实践经验前后端不分离

webpack配置之后端渲染2017年, vue, react, angular 已经占据前端的主流, 不得不承认这也是前端的未来发展方向. 但是后端渲染的开发方式仍然很常见, 不管是个人项目还是商业项目, 后端渲染搞起来真是糙猛快. 但是借着前端发展的东风, 后端渲染也有很大的改进空间. 这里就介绍一下我自己的实践经验: 前后端不分离的情况下实现热加载以及一定程度下的前端主导开发. 这里以koa为例, 但是仓库里也有django版. 理论上所有语言都可以实现. 有兴趣可以看下, 仓库地址在文末.

效果图

原理

原理说起来还是很简单的:

独立启动静态资源服务器打包生成资源列表(manifest)

通过webpack-manifest-plugin插件生成manifest.json文件

new ManifestPlugin({
    writeToFileEmit: true,
    publicPath: "http://localhost:5000/static/"
})

文件结果如图:

服务器读取资源列表加载到模板文件中

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(模板变量)中, 之后就可以直接在模板中引用静态资变量了




  
  
  
  {{ title }}
  


  

Hello, World

需要注意的是由于后端渲染的一般是多入口, 所以只需要在对应的模板中引入需要的入口文件.

热加载

热加载其实也有很多解决方案: 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()

需要注意的有两点:

extract-text-webpack-plugin 加上之后就无法hot reload, 开发配置不要加上这个插件

根据webpack的文档, 每个入口文件都需要加上下面一段代码才能实现 js的hot reload

if (module.hot) {
  module.hot.accept()
}

完整配置和代码这里就不贴了, 仓库地址(django部分代码在master分支): https://github.com/xiadd/wepack-mutipage

原文地址: https://github.com/xiadd/blog...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/89312.html

相关文章

  • 手把手教你搭建SSR(vue/vue-cli + express)

    摘要:最近简单的研究了一下,对已经有了一个简单的认知,主要应用于单页面应用,是很不错的框架。创建好之后,在命令行直接输入即可,当控制台显示服务已启动则表示该服务已经启动成功了。配置参数中有一项为这项配置的就是我们即将使用的模板。 最近简单的研究了一下SSR,对SSR已经有了一个简单的认知,主要应用于单页面应用,Nuxt是SSR很不错的框架。也有过调研,简单的用了一下,感觉还是很不错。但是还是...

    liangdas 评论0 收藏0
  • 无痛学会各种 2 的 Vue2+Vuex2+Webpack2 前后同构渲染

    摘要:它会检测出最大静态子树就是不需要动态性的子树并且从渲染函数中萃取出来。这样在每次重渲染的时候,它就会直接重用完全相同的同时跳过比对。需要注意的是,中的操作必须是同步的,不可以存在异步操作的情况。 新增:哈哈,最近又推出了 vue 的文章,在这里放个链接~手把手教你从零写一个简单的 VUE 感谢有人看我扯技术,这篇文章主要介绍最近非常火的vue2前端框架的特点和vue2+vuex2+we...

    fish 评论0 收藏0
  • 无痛学会各种 2 的 Vue2+Vuex2+Webpack2 前后同构渲染

    摘要:它会检测出最大静态子树就是不需要动态性的子树并且从渲染函数中萃取出来。这样在每次重渲染的时候,它就会直接重用完全相同的同时跳过比对。需要注意的是,中的操作必须是同步的,不可以存在异步操作的情况。 新增:哈哈,最近又推出了 vue 的文章,在这里放个链接~手把手教你从零写一个简单的 VUE 感谢有人看我扯技术,这篇文章主要介绍最近非常火的vue2前端框架的特点和vue2+vuex2+we...

    30e8336b8229 评论0 收藏0
  • 无痛学会各种 2 的 Vue2+Vuex2+Webpack2 前后同构渲染

    摘要:它会检测出最大静态子树就是不需要动态性的子树并且从渲染函数中萃取出来。这样在每次重渲染的时候,它就会直接重用完全相同的同时跳过比对。需要注意的是,中的操作必须是同步的,不可以存在异步操作的情况。 新增:哈哈,最近又推出了 vue 的文章,在这里放个链接~手把手教你从零写一个简单的 VUE 感谢有人看我扯技术,这篇文章主要介绍最近非常火的vue2前端框架的特点和vue2+vuex2+we...

    Pluser 评论0 收藏0
  • 使用React做同构应用

    摘要:使用做同构应用是用于开发数据不断变化的大型应用程序的前端框架,结合其他轮子例如和就可以开发大型的前端应用。然后客户端检测到这些已经生成的就不会重新渲染,直接使用现有的结构。 使用React做同构应用 React是用于开发数据不断变化的大型应用程序的前端view框架,结合其他轮子例如redux和react-router就可以开发大型的前端应用。 React开发之初就有一个特别的优势,就是...

    ymyang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<