摘要:配置之后端渲染年已經(jīng)占據(jù)前端的主流不得不承認這也是前端的未來發(fā)展方向但是后端渲染的開發(fā)方式仍然很常見不管是個人項目還是商業(yè)項目后端渲染搞起來真是糙猛快但是借著前端發(fā)展的東風后端渲染也有很大的改進空間這里就介紹一下我自己的實踐經(jīng)驗前后端不分離
webpack配置之后端渲染2017年, vue, react, angular 已經(jīng)占據(jù)前端的主流, 不得不承認這也是前端的未來發(fā)展方向. 但是后端渲染的開發(fā)方式仍然很常見, 不管是個人項目還是商業(yè)項目, 后端渲染搞起來真是糙猛快. 但是借著前端發(fā)展的東風, 后端渲染也有很大的改進空間. 這里就介紹一下我自己的實踐經(jīng)驗: 前后端不分離的情況下實現(xiàn)熱加載以及一定程度下的前端主導開發(fā). 這里以koa為例, 但是倉庫里也有django版. 理論上所有語言都可以實現(xiàn). 有興趣可以看下, 倉庫地址在文末.
效果圖 原理原理說起來還是很簡單的:
獨立啟動靜態(tài)資源服務(wù)器打包生成資源列表(manifest)
通過webpack-manifest-plugin插件生成manifest.json文件
new ManifestPlugin({ writeToFileEmit: true, publicPath: "http://localhost:5000/static/" })
文件結(jié)果如圖:
服務(wù)器讀取資源列表加載到模板文件中
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(模板變量)中, 之后就可以直接在模板中引用靜態(tài)資變量了
{{ title }} Hello, World
需要注意的是由于后端渲染的一般是多入口, 所以只需要在對應(yīng)的模板中引入需要的入口文件.
熱加載熱加載其實也有很多解決方案: 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, 開發(fā)配置不要加上這個插件
根據(jù)webpack的文檔, 每個入口文件都需要加上下面一段代碼才能實現(xiàn) js的hot reload
if (module.hot) { module.hot.accept() }
完整配置和代碼這里就不貼了, 倉庫地址(django部分代碼在master分支): https://github.com/xiadd/wepack-mutipage
原文地址: https://github.com/xiadd/blog...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/89312.html
摘要:最近簡單的研究了一下,對已經(jīng)有了一個簡單的認知,主要應(yīng)用于單頁面應(yīng)用,是很不錯的框架。創(chuàng)建好之后,在命令行直接輸入即可,當控制臺顯示服務(wù)已啟動則表示該服務(wù)已經(jīng)啟動成功了。配置參數(shù)中有一項為這項配置的就是我們即將使用的模板。 最近簡單的研究了一下SSR,對SSR已經(jīng)有了一個簡單的認知,主要應(yīng)用于單頁面應(yīng)用,Nuxt是SSR很不錯的框架。也有過調(diào)研,簡單的用了一下,感覺還是很不錯。但是還是...
摘要:它會檢測出最大靜態(tài)子樹就是不需要動態(tài)性的子樹并且從渲染函數(shù)中萃取出來。這樣在每次重渲染的時候,它就會直接重用完全相同的同時跳過比對。需要注意的是,中的操作必須是同步的,不可以存在異步操作的情況。 新增:哈哈,最近又推出了 vue 的文章,在這里放個鏈接~手把手教你從零寫一個簡單的 VUE 感謝有人看我扯技術(shù),這篇文章主要介紹最近非?;鸬膙ue2前端框架的特點和vue2+vuex2+we...
摘要:它會檢測出最大靜態(tài)子樹就是不需要動態(tài)性的子樹并且從渲染函數(shù)中萃取出來。這樣在每次重渲染的時候,它就會直接重用完全相同的同時跳過比對。需要注意的是,中的操作必須是同步的,不可以存在異步操作的情況。 新增:哈哈,最近又推出了 vue 的文章,在這里放個鏈接~手把手教你從零寫一個簡單的 VUE 感謝有人看我扯技術(shù),這篇文章主要介紹最近非?;鸬膙ue2前端框架的特點和vue2+vuex2+we...
摘要:它會檢測出最大靜態(tài)子樹就是不需要動態(tài)性的子樹并且從渲染函數(shù)中萃取出來。這樣在每次重渲染的時候,它就會直接重用完全相同的同時跳過比對。需要注意的是,中的操作必須是同步的,不可以存在異步操作的情況。 新增:哈哈,最近又推出了 vue 的文章,在這里放個鏈接~手把手教你從零寫一個簡單的 VUE 感謝有人看我扯技術(shù),這篇文章主要介紹最近非常火的vue2前端框架的特點和vue2+vuex2+we...
摘要:使用做同構(gòu)應(yīng)用是用于開發(fā)數(shù)據(jù)不斷變化的大型應(yīng)用程序的前端框架,結(jié)合其他輪子例如和就可以開發(fā)大型的前端應(yīng)用。然后客戶端檢測到這些已經(jīng)生成的就不會重新渲染,直接使用現(xiàn)有的結(jié)構(gòu)。 使用React做同構(gòu)應(yīng)用 React是用于開發(fā)數(shù)據(jù)不斷變化的大型應(yīng)用程序的前端view框架,結(jié)合其他輪子例如redux和react-router就可以開發(fā)大型的前端應(yīng)用。 React開發(fā)之初就有一個特別的優(yōu)勢,就是...
閱讀 3015·2021-11-24 09:39
閱讀 2949·2021-09-29 09:34
閱讀 3664·2021-09-24 10:23
閱讀 1820·2021-09-22 15:41
閱讀 1755·2019-08-30 15:55
閱讀 3562·2019-08-30 13:58
閱讀 2686·2019-08-30 13:11
閱讀 1716·2019-08-29 12:31