摘要:如何在下搭建多模塊單模塊多路由骨架屏前言骨架屏的用戶感知比更好,此前看過很多專欄以及文章,此次實踐中還是遇到需要學習的部分。包括因為可能信息面不全,對插件源碼進行了詳細解讀,希望對于將要在項目中搭建骨架屏的小伙伴們有所幫助。
如何在webpack+vue+vue-cli下搭建多模塊/單模塊多路由骨架屏 前言
骨架屏的用戶感知比loading更好,此前看過很多專欄以及文章,此次實踐中還是遇到需要學習的部分。
對于骨架屏或者占位符學習了Vue頁面骨架屏注入實踐,通過服務器渲染出靜態頁面,在js加載完之前進行首屏加載是感知比較合理的一個選擇。
包括因為可能信息面不全,對插件源碼進行了詳細解讀,希望對于將要在項目中搭建骨架屏的小伙伴們有所幫助。
此次使用的vue版本是2.4.5因此vue-server-renderer也需要使用同一個版本
vue-skeleton-webpack-plugin骨架屏與page-skeleton-webpack-plugin骨架屏生成插件
基于vue和webpack的skeleton插件
以上參考文章里有注入骨架屏的原理與知識,在此就不搬運了,感謝以上巨人。
vue-skeleton-webpack-plugin插件GITHUB地址
vue-skeleton-webpack-plugin
主要利用這個骨架屏組件 以及他依賴的其他組件 此組件我使用1.22版本,最新的將插件提供的loader放到了非主要API部分,因此在本文章中未使用此loader,以防版本升級將此loader刪去。
vue-server-renderer
熟悉ssr的小伙伴對這個插件都不陌生,通過其API createBundleRenderer創建render進行渲染,具體參考[Vue頁面骨架屏注入實踐][5]。 **注意點:vue與vue-server-renderer要使用同一個版本,否則會報錯**
extract-text-webpack-plugin
這也是比較重要的一個插件,如果你的腳手架沒有對html與css進行分離,那么你的樣式(除了內聯樣式以外)將無法被應用,后續將會對此講解。正文 如何配置多模塊(多頁面)骨架屏
在你的webpack配置文件的plugins 加入插件,為了節省性能我只在prod的時候進行plugins插入,開發模式配置以路由的模式進行開發,后續會詳解。
webpackConfig.plugins.push( new SkeletonWebpackPlugin({ webpackConfig: require("./webpack.skeleton.conf"), //主要的配置在個部分 quiet: true, minimize: true, /**router: { mode: "hash", routes: skeletonPluginRoutes //此部分配置是SPA(單頁面)多路由腳手架配置 }**/ }));
webpack.skeleton.conf.js
...//以上常規配置不寫明 let merge = require("webpack-merge"); let path = require("path") let merge = require("webpack-merge") let config = require("../config") let utils = require("./utils") let baseWebpackConfig = require("./webpack.base.conf") let SkeletonWebpackPlugin = require("vue-skeleton-webpack-plugin"); let isProduction = process.env.NODE_ENV === "production";//判斷是否是開發模式,是否需要開啟樣式分離 const sourceMapEnabled = isProduction ? config.build.productionSourceMap : config.dev.cssSourceMap; //處理開發路徑 function resolve(dir) { return path.join(__dirname, "..", dir) } let skeletonWebpackConfig = merge(baseWebpackConfig, { target: "node", // devtool: false, module: {}, entry: { "key":"../entry-skeleton.js",//這是你骨架屏入口文件的map,注意這里的key必須與你在webpack里模塊的入口文件相同 "key":value,//對應的鍵值是你的骨架屏入口文件 }, output: Object.assign({}, baseWebpackConfig.output, { libraryTarget: "commonjs2" }), plugins: [] }); //如果項目中沒有樣式與html的分離,可以扎到自己rules配置的.vue loader 進行開啟 skeletonWebpackConfig.module.rules[1].options.loaders = utils.cssLoaders({ sourceMap: sourceMapEnabled, extract: true }); module.exports = skeletonWebpackConfig
配置此config文件最重要的
將entry文件的key與webpack的key進行配對
一定要將自己的css與HTML分離(如果出現無法載入樣式的情況)
entry-skeleton.js
import Vue from "vue" import homeSkeleton from "./home.skeleton.vue"; // import indexOverViewSkeleton from "./indexOverView.skeleton.vue"; export default new Vue({ components: { homeSkeleton, // indexOverViewSkeleton }, template: `` });
只是簡單的VUE入口文件,依舊要注意VUE的語法與規則,比如template只允許存在一個根元素
如何配置單頁面多路由骨架屏webpackConfig.plugins.push( new SkeletonWebpackPlugin({ webpackConfig: require("./webpack.skeleton.conf"), quiet: true, minimize: true, router: { mode: "hash", routes: [{ path:"/home", //你希望這個路由頁面時出現骨架屏 skeletonId:"homeSkeleton", //在skeleton入口文件里配置的id entryName:"key" //webpack打包時你入口文件的entryName,應與在plugin 入口文件一樣的MAPkey一致 },{ path:"/main", //你希望這個路由頁面時出現骨架屏 skeletonId:"mainSkeleton", //在skeleton入口文件里配置的id entryName:"key" //webpack打包時你入口文件的entryName,應與在plugin 入口文件一樣的MAPkey一致 },] } }));
entry-skeleton.js
import Vue from "vue" import homeSkeleton from "./home.skeleton.vue"; import indexOverViewSkeleton from "./indexOverView.skeleton.vue"; export default new Vue({ components: { homeSkeleton, indexOverViewSkeleton }, template: `配置中需要注意的幾點` });
1、保持自己的entryName,config里entryKey與webpack腳手架入口文件的key一致
2、開啟樣式分離!!!!!!!!重要的事情說三遍
3、因為插件經歷了幾個版本的更新,目前版本是接受loader的,但配置已經扁平化,所以建議不適用插件提供的loader配置。
4、省去了筆者部分根據腳手架配置的自動獲取入口的代碼,使用手寫的,減少配置,能夠讓腳手架做的事情,我們就不要做了哦!!!筆者的建議。
這篇小小的筆記先介紹配置文件吧~~~希望對大家有所幫助,也很感謝網上的各位碼字作者提供的思路。
看了插件的源碼思路也很清晰,對于骨架屏的原理有了更深的理解。
鴨,到點去敷面膜了,希望自己有一天也可以開源一款前端插件,成為皮膚最好的前端。哈哈哈哈哈哈。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/54702.html
摘要:如何在下搭建多模塊單模塊多路由骨架屏前言骨架屏的用戶感知比更好,此前看過很多專欄以及文章,此次實踐中還是遇到需要學習的部分。包括因為可能信息面不全,對插件源碼進行了詳細解讀,希望對于將要在項目中搭建骨架屏的小伙伴們有所幫助。 如何在webpack+vue+vue-cli下搭建多模塊/單模塊多路由骨架屏 前言 骨架屏的用戶感知比loading更好,此前看過很多專欄以及文章,此次實踐中還是...
摘要:給項目加一個骨架屏吧骨架屏可以理解為是當數據還未加載進來前,頁面的一個空白版本,一個簡單的關鍵渲染路徑。安裝過程中報錯提示如下執行這個命令使用我這個項目是基于腳手架開發的。 給項目加一個骨架屏吧 骨架屏可以理解為是當數據還未加載進來前,頁面的一個空白版本,一個簡單的關鍵渲染路徑。用戶會看到一個樣式簡單,描繪了當前頁面的大致框架的骨架屏頁面,然后骨架屏中各個占位部分被實際資源完全替換,這...
摘要:可以使用或來安裝我用來重新嘗試一次對速度表示不理想的可以嘗試淘寶的不要過度依賴中可以寫成放哪都行,可以寫成可以寫成看到這個畫面,安裝完成了。 初步搭建腳手架 Tips 任何不錯的開源項目都有 project-cli 腳手架、我們用它生成往往能快速配制出最佳的、理想的腳手架 我通常使用 cli 生成項目骨架再在之基礎上進行個人修改。 什么是 CLI 命令行界面(英語:command-li...
摘要:可以使用或來安裝我用來重新嘗試一次對速度表示不理想的可以嘗試淘寶的不要過度依賴中可以寫成放哪都行,可以寫成可以寫成看到這個畫面,安裝完成了。 初步搭建腳手架 Tips 任何不錯的開源項目都有 project-cli 腳手架、我們用它生成往往能快速配制出最佳的、理想的腳手架 我通常使用 cli 生成項目骨架再在之基礎上進行個人修改。 什么是 CLI 命令行界面(英語:command-li...
閱讀 2212·2021-11-22 13:52
閱讀 3847·2021-11-10 11:36
閱讀 1380·2021-09-24 09:47
閱讀 1088·2019-08-29 13:54
閱讀 3360·2019-08-29 13:46
閱讀 1942·2019-08-29 12:16
閱讀 2108·2019-08-26 13:26
閱讀 3471·2019-08-23 17:10