简单对gradle插件实现进行复习
上面讲到要配置一个入口类,这个入口类就是实现了Plugin接口的类,它有一个override fun apply(project: Project)方法,就是我们插件开始执行的地方,相当于main函数,参数project就是整个工程的配置文件
可以使用以下方法,从我们使用插件的地方获取到对插件的配置
python复制代码project.extensions.create("config", Config::class.java)mConfig = project.property("config") as Config
Config是一个java bean数据类
"config"是我们在build中的配置名称
上面说了为什么要实现这样一个插件和该如何实现一个gradle插件,那么下面就具体介绍该插件的实现过程
上面已经说了gradle插件的实现,那么我们就从apply方法开始说起。
既然是要hock android打包的编译过程,那就要寻找android打包时,合适的task
在android插件编译生成apk的过程中,有好多task都可以生成apk,它们的名字基于Build Types 和 Product Flavor 生成。那么我们怎么拿到具体生成apk的task组呢?
为了解决这个问题。android插件有几个属性,就是我们平常配置的变体(所谓的环境),androd中有三类变体
这三个对象都是实现了BaseVariant(BaseVariantImpl为实现这个接口的抽象类)接口的类的对象的集合
属性名
属性类型
说明
name
String
Variant 的名字,唯一
description
String
Variant 的描述说明
dirName
String
Variant 的子文件夹名,唯一。可能有不止一个子文件夹,例如 “debug/flavor1”
baseName
String
Variant 输出的基础名字,必须唯一
outputFile
File
Variant 的输出,该属性可读可写
processManifest
ProcessManifest
处理 Manifest 的 task
aidlCompile
AidlCompile
编译 AIDL 文件的 task
renderscriptCompile
RenderscriptCompile
编译 Renderscript 文件的 task
mergeResources
MergeResources
合并资源文件的 task
mergeAssets
MergeAssets
合并 assets 的 task
processResources
ProcessAndroidResources
处理并编译资源文件的 task
generateBuildConfig
GenerateBuildConfig
生成 BuildConfig 类的 task
javaCompile
JavaCompile
编译 Java 源代码的 task
processJavaResources
Copy
处理 Java 资源的 task
assemble
DefaultTask
Variant 的标志性 assemble task
因为我们的插件应该可以应用在主工程或者模块包上的,所以当我们插件运行后,我们要检测当前使用我们插件的模块是主工程,还是模块包
kotlin复制代码val hasAppPlugin = project.plugins.hasPlugin("com.android.application")val variants = if (hasAppPlugin) { (project.property("android") as AppExtension).applicationVariants} else { (project.property("android") as LibraryExtension).libraryVariants}
我们想hock住android插件运行的task任务,就需要一个重要的gradle回调
erlang复制代码project.afterEvaluate{...}
afterEvaluate该方法就是整个gradle配置文件配置成功后的回调,证明此时配置已检查完毕,所有task已经就绪,已经可以开始按指定顺序运行task了,那么我就需要在这个回调里办事!
Grade 执行顺序
执行setting,检测所有module,为每个模块配置project
加载build.properties,生成task执行链表和配置
执行某个指定task,然后会先执行该task所依赖的task
配置完成后,开始遍历variants中所有的变体
arduino复制代码project.afterEvaluate { variants.all { variant -> ... }}
mergeResourcesProvider这个任务就是android插件合并所有module中资源的task,看名字就知道了。
我们可以从变体中获取这个task对象
ini复制代码val mergeResourcesTask = variant.mergeResourcesProvider.get()
那么,我们自己的任务呢?
gradle api提供给我们可以在代码中生成task的方法
ini复制代码val mcPicTask = project.task("CheckBigImage${variant.name.capitalize()}")
使用project.task("taskname")来生成一个我们自己需要执行的task
然后我们编写这个task的逻辑,也是本插件的逻辑
复制代码mcPicTask.doLast {...}
variant里面有各种对象,allRawAndroidResources恰好就是我们需要的。它只有3.3以上才会有。
ini复制代码val dir = variant.allRawAndroidResources.files
这个dir对象,就是android所有文件资源的files集合
ok。让我们遍历这个文件list吧!
scss复制代码for (channelDir: File in dir) {check(channelDir)}fun check(file: File) { if(file.isDirectory) { check(file)} else { process(file)}}
如果遇到文件夹,这里是一个递归调用。
如果遇到文件,就可以按照自己的规则处理了。
我们task写好后,需要和mergeResourcesProvider挂钩
less复制代码mergeResourcesTask.dependsOn(project.tasks.findByName(mcPicTask.name))
使mergeResourcesTask依赖我们的mcPicTask,当mergeResourcesTask执行前,就会先执行我们的mcPicTask了!!
注意:此处直接使用mergeResourcesTask系统task依赖我们的task,我们的task执行顺序会和mergeResourcesTask原有的依赖混杂在一起,不可控。后面讲一种可控的方法
这个逻辑应该实现在上面伪代码process(file:File)方法中
这里我们只处理普通图片转换为webp的压缩。jpg,png的自压缩原理相同,就不复述了
想压缩转换webp图片,需要用到转换工具
google提供的有一套命令行转换工具:cwebp ,各个平台都有,我们去下载一套,放在我们的主工程文件夹下就可以了
这里需要注意的是:为了方便,如果把cwebp命令行程序放在环境变量下,那么执行命令时,拼接命令时,直接拼接cwebp就好。
如果使用工程目录下的cwebp,执行前,需要在cwebp命令前面拼接它所在的工程目录。
使用
lua复制代码project.rootDir.path
可以获取工程的根目录
可以使用java的api
scss复制代码Runtime.getRuntime().exec(cmd)
现在可以愉快的转换图片了
bash复制代码Tools.cmd("cwebp", "${imgFile.path} -o ${webpFile.path} -m 6 -quiet")
转换后,记得把原图删掉
优化点:
有的图片转换后比以前还大,这里需要注意
第一次扫描过后的无法优化的图片,可以存在一个text文本当中,第二次执行时,就不要去转换了
在linux系统上,创建和删除文件都需要权限,如果没有权限就会失败。这时需要先判断当前的操作系统是不是linux,如果是,可以执行chmod 755 -R ${FileUtil.getRootDirPath()}添加权限
这里可以优化一下,在我们的mcPicTask前面再加一个task,用来添加权限,这个task只对文件夹进行递归添加就可以了,比一个一个文件要来的快。
因为我们不清楚系统的task(mergeResourcesTask)都依赖了哪些,那么如何在依赖上再加依赖,如何插入task呢?
gradle api提供给了我们一个方法,xxx.taskDependencies.getDependencies(xxx)可以获取自己的依赖树
在这里就是
scss复制代码(project.tasks.findByName(chmodTask.name) asTask).dependsOn(mergeResourcesTask.taskDependencies.getDependencies(mergeResourcesTask))
让chmodTask依赖mergeResourcesTask的依赖。假如mergeResourcesTask是A,chmodTask是B。A依赖一个系统的C。那么上面的代码就是让B依赖了C。这时的task图就是 B->C,A->C
接下来我们再把mcPicTask(简称为D)也依赖进来
arduino复制代码(project.tasks.findByName(mcPicTask.name) as Task).dependsOn(project.tasks.findByName(chmodTask.name) as Task)
这时就是D->B->C,A->C
最后,回到我们刚刚拦截图片的逻辑的最后代码
less复制代码mergeResourcesTask.dependsOn(project.tasks.findByName(mcPicTask.name))
就变成了A->D->B->C,也就是mergeResourcesTask->mcPicTask->chmodTask->原依赖task,依赖和执行顺序是相反的。
正常的代码就是
scss复制代码(project.tasks.findByName(chmodTask.name) asTask).dependsOn(mergeResourcesTask.taskDependencies.getDependencies(mergeResourcesTask))(project.tasks.findByName(mcPicTask.name) as Task).dependsOn(project.tasks.findByName(chmodTask.name) as Task)mergeResourcesTask.dependsOn(project.tasks.findByName(mcPicTask.name))
直接使用mergeResourcesTask.dependsOn(project.tasks.findByName(mcPicTask.name))插入task。执行顺序打印
......
Task :app:mainApkListPersistenceDebug UP-TO-DATE
Task :app:CheckBigImageDebug
Task :app:generateDebugResValues UP-TO-DATE Task :app:generateDebugResources UP-TO-DATE Task :app:mergeDebugResources
......
而使用正规的插入法顺序
Task :app:mainApkListPersistenceDebug UP-TO-DATE Task :app:generateDebugResValues UP-TO-DATE Task :app:generateDebugResources UP-TO-DATE Task :app:chmodDebug
Task :app:CheckBigImageDebug
Task :app:mergeDebugResources
我们上面的例子,都是基于比较最新的gradle和android gradle tools版本(>3.3),android插件直接提供给了我们allRawAndroidResources,方便无比,直接在merge前遍历它就好了。
那么3.3之前的版本呢?就是我们最初的设想了,在合并完各个module资源后,扫描merge文件夹!这里又有aapt和aapt2的差异
关掉aapt2
ini复制代码android.enableAapt2=false
在mergeDebugResources后,processDebugResources前扫描文件夹
前面说过,mergeDebugResources是合并所有module的资源文件到固定目录
那么processDebugResources是什么呢?就是处理这些已经合并完成的文件,生成R.id,资源索引之类的文件
那么我们的任务就必须插入到processDebugResources前面,而不是mergeDebugResources了
仔细翻了翻MergeResources里面的方法,有一个getResSet和computeResourceSetList看起来有点意思。那么computeResourceSetList中又调用了getResSet。最后发现computeResourceSetList果然可以获取所有文件列表。
less复制代码/*** Computes the list of resource sets to be used during execution based all the inputs.*/@VisibleForTesting@NonNullList<ResourceSet> computeResourceSetList()
注释也很有意思,有道翻译一下:根据所有输入计算执行期间使用的资源集列表。
鉴于该方法是友元方法,就使用反射获取。
因为3.3之后,aapt2是强制开启的,并且aapt2 merge后的文件不是原文件了哦!注意aapt1合并后,还是正常的xxx.png。aapt2合并后的文件扩展名为flat
所以,方法一不支持大于3.3的gradle版本。方法二支持。可以平滑过渡到新版本。鉴于新版本的gradle直接提供了allRawAndroidResources这样的方法,所以在3.3以上,直接使用它就可以了
allRawAndroidResources提供的是未合并前的资源路径
扫描合并文件夹,扫描的是编译期merge成功后的文件夹
Vue是一个构建数据驱动的 web 界面的渐进式框架。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件特别整理了常用的vue插件,来了个大汇总,方便查找使用,便于工作和学习。很全的vue插件汇总,赶紧收藏下吧!
一、UI组件及框架
element - 饿了么出品的Vue2的web UI工具套件
mint-ui - Vue 2的移动UI元素
iview - 基于 Vuejs 的开源 UI 组件库
Keen-UI - 轻量级的基本UI组件合集
vue-material - 通过Vue Material和Vue 2建立精美的app应用
muse-ui - 三端样式一致的响应式 UI 库
vuetify - 为移动而生的Vue JS 2组件框架
vonic - 快速构建移动端单页应用
vue-blu - 帮助你轻松创建web应用
vue-multiselect - Vue.js选择框解决方案
VueCircleMenu - 漂亮的vue圆环菜单
vue-chat - vuejs和vuex及webpack的聊天示例
radon-ui - 快速开发产品的Vue组件库
vue-waterfall - Vue.js的瀑布布局组件
vue-carbon - 基于 vue 开发MD风格的移动端
vue-beauty - 由vue和ant design创建的优美UI组件
bootstrap-vue - 应用于Vuejs2的Twitter的Bootstrap 4组件
vueAdmin - 基于vuejs2和element的简单的管理员模板
vue-ztree - 用 vue 写的树层级组件
vue-tree - vue树视图组件
vue-tabs - 多tab页轻型框架
二、滚动scroll组件
vue-scroller - Vonic UI的功能性组件
vue-mugen-scroll - 无限滚动组件
vue-infinite-loading - VueJS的无限滚动插件
vue-virtual-scroller - 带任意数目数据的顺畅的滚动
vue-infinite-scroll - VueJS的无限滚动指令
vue-scrollbar - 最简单的滚动区域组件
vue-scroll - vue滚动
vue-pull-to-refresh - Vue2的上拉下拉
mint-loadmore - VueJS的双向下拉刷新组件
vue-smoothscroll - smoothscroll的VueJS版本
三、slider组件
vue-awesome-swiper - vue.js触摸滑动组件
vue-slick - 实现流畅轮播框的vue组件
vue-swipe - VueJS触摸滑块
vue-swiper - 易于使用的滑块组件
vue-images - 显示一组图片的lightbox组件
vue-carousel-3d - VueJS的3D轮播组件
vue-slide - vue轻量级滑动组件
vue-slider - vue 滑动组件
vue-m-carousel - vue 移动端轮播组件
dd-vue-component - 订单来了的公共组件库
vue-easy-slider - Vue 2.x的滑块组件
四、编辑器
markcook - 好看的markdown编辑器
eme - 优雅的Markdown编辑器
vue-syntax-highlight - Sublime Text语法高亮
vue-quill-editor - 基于Quill适用于Vue2的富文本编辑器
Vueditor - 所见即所得的编辑器
vue-html5-editor - html5所见即所得编辑器
vue2-editor - HTML编辑器
vue-simplemde - VueJS的Markdown编辑器组件
vue-quill - vue组件构建quill编辑器
五、图表
vue-table - 简化数据表格
vue-chartjs - vue中的Chartjs的封装
vue-charts - 轻松渲染一个图表
vue-chart - 强大的高速的vue图表解析
vue-highcharts - HighCharts组件
chartjs - Vue Bulma的chartjs组件
vue-chartkick - VueJS一行代码实现优美图表
六、日历
vue-calendar - 日期选择插件
vue-datepicker - 日历和日期选择组件
vue-datetime-picker - 日期时间选择控件
vue2-calendar - 支持lunar和日期事件的日期选择器
vue-fullcalendar - 基于vue.js的全日历组件
vue-datepicker - 漂亮的Vue日期选择器组件
datepicker - 基于flatpickr的时间选择组件
vue2-timepicker - 下拉时间选择器
vue-date-picker - VueJS日期选择器组件
vue-datepicker-simple - 基于vue的日期选择器
七、地址选择
vue-city - 城市选择器
vue-region-picker - 选择中国的省份市和地区
八、地图
vue-amap - 基于Vue 2和高德地图的地图组件
vue-google-maps - 带有双向数据绑定Google地图组件
vue-baidu-map- 基于 Vue 2的百度地图组件库
vue-cmap - Vue China map可视化组件
九、播放器
vue-video-player - VueJS视频及直播播放器
vue-video - Vue.js的HTML5视频播放器
vue-music-master - vue手机端网页音乐播放器
十、文件上传
vue-upload-component - Vuejs文件上传组件
vue-core-image-upload - 轻量级的vue上传插件
vue-dropzone - 用于文件上传的Vue组件
十一、图片处理
vue-lazyload-img - 移动优化的vue图片懒加载插件
vue-image-crop-upload - vue图片剪裁上传组件
vue-svgicon - 创建svg图标组件的工具
vue-img-loader - 图片加载UI组件
vue-image-clip- 基于vue的图像剪辑组件
vue-progressive-image - Vue的渐进图像加载插件
十二、提示
vue-toast-mobile - VueJS的toast插件
vue-msgbox - vuejs的消息框
vue-tooltip - 带绑定信息提示的提示工具
vue-verify-pop - 带气泡提示的vue校验插件
十三、进度条
vue-radial-progress - Vue.js放射性进度条组件
vue-progressbar - vue轻量级进度条
vue2-loading-bar - 最简单的仿Youtube加载条视图
十四、开发框架汇总
vue-admin - Vue管理面板框架
electron-vue - Electron及VueJS快速启动样板
vue-2.0-boilerplate - Vue2单页应用样板
vue-webgulp - 仿VueJS Vue loader示例
vue-bulma - 轻量级高性能MVVM Admin UI框架
vue-spa-template - 前后端分离后的单页应用开发
Framework7-Vue - VueJS与Framework7结合
vue-element-starter - vue启动页
十五、实用库汇总
vuelidate - 简单轻量级的基于模块的Vue.js验证
qingcheng - qingcheng主题
vuex - 专为 Vue.js 应用程序开发的状态管理模式
vue-axios - 将axios整合到VueJS的封装
vue-desktop - 创建管理面板网站的UI库
vue-meta - 管理app的meta信息
avoriaz - VueJS测试实用工具库
vue-framework7 - 结合VueJS使用的Framework7组件
vue-lazy-render - 用于Vue组件的延迟渲染
vue-svg-icon - vue2的可变彩色svg图标方案
vue-online - reactive的在线和离线组件
vue-password-strength-meter - 交互式密码强度计
vuep - 用实时编辑和预览来渲染Vue组件
vue-bootstrap-modal - vue的Bootstrap样式组件
element-admin - 支持 vuecli 的 Element UI 的后台模板
vue-shortkey - 应用于Vue.js的Vue-ShortKey 插件
cleave - 基于cleave.js的Cleave组件
vue-events - 简化事件的VueJS插件
http-vue-loader - 从html及js环境加载vue文件
vue-electron - 将选择的API封装到Vue对象中的插件
vue-router-transition - 页面过渡插件
vuemit - 处理VueJS事件
vue-cordova - Cordova的VueJS插件
vue-qart - 用于qartjs的Vue2指令
vue-websocket - VueJS的Websocket插件
vue-gesture - VueJS的手势事件插件
vue-local-storage - 具有类型支持的Vuejs本地储存插件
lazy-vue - 懒加载图片
vue-lazyloadImg - 图片懒加载插件
vue-bus - VueJS的事件总线
vue-observe-visibility - 当元素在页面上可见或隐藏时检测
vue-notifications - 非阻塞通知库
v-media-query - vue中添加用于配合媒体查询的方法
vuex-shared-mutations - 分享某种Vuex mutations
vue-lazy-component - 懒加载组件或者元素的Vue指令
vue-reactive-storage - vue插件的Reactive层
vue-ts-loader - 在Vue装载机检查脚本
vue-pagination-2 - 简单通用的分页组件
vuex-i18n - 定位插件
Vue.resize - 检测HTML调整大小事件的vue指令
vue-zoombox - 一个高级zoombox
leo-vue-validator - 异步的表单验证组件
modal - Vue Bulma的modal组件
Famous-Vue - Famous库的vue组件
vue-input-autosize - 基于内容自动调整文本输入的大小
vue-file-base64 - 将文件转换为Base64的vue组件
Vue-Easy-Validator - 简单的表单验证
vue-truncate-filter - 截断字符串的VueJS过滤器
十六、服务端
vue-ssr - 结合Express使用Vue2服务端渲染
nuxt.js - 用于服务器渲染Vue app的最小化框架
vue-ssr - 非常简单的VueJS服务器端渲染模板
vue-easy-renderer - Nodejs服务端渲染
express-vue - 简单的使用服务器端渲染vue.js
十七、辅助工具
DejaVue - Vuejs可视化及压力测试
vue-generate-component - 轻松生成Vue js组件的CLI工具
vscode-VueHelper - 目前vscode最好的vue代码提示插件
vue-play - 展示Vue组件的最小化框架
VuejsStarterKit - vuejs starter套件
vue-multipage-cli - 简单的多页CLI
十八、应用实例
pagekit - 轻量级的CMS建站系统
vuedo - 博客平台
koel - 基于网络的个人音频流媒体服务
CMS-of-Blog - 博客内容管理器
vue-cnode - 重写vue版cnode社区
vue-ghpages-blog - 依赖GitHub Pages无需本地生成的静态博客
swoole-vue-webim - Web版的聊天应用
fewords - 功能极其简单的笔记本
jackblog-vue - 个人博客系统
vue-blog - 使用Vue2.0 和Vuex的vue-blog
vue-dashing-js - nuvo-dashing-js的fork
rss-reader - 简单的rss阅读器
十九、Demo示例
eleme - 高仿饿了么app商家详情
NeteaseCloudWebApp - 高仿网易云音乐的webapp
vue-zhihu-daily - 知乎日报 with Vuejs
Vue-cnodejs - 基于vue重写Cnodejs.org的webapp
vue2-demo - 从零构建vue2 + vue-router + vuex 开发环境
vue-wechat - vue.js开发微信app界面
vue-music - Vue 音乐搜索播放
maizuo - vue/vuex/redux仿卖座网
vue-demo - vue简易留言板
spa-starter-kit - 单页应用启动套件
zhihudaily-vue - 知乎日报web版
douban - 模仿豆瓣前端
vue-Meizi - vue最新实战项目
vue-demo-kugou - vuejs仿写酷狗音乐webapp
vue2.0-taopiaopiao - vue2.0与express构建淘票票页面
node-vue-server-webpack - Node.js+Vue.js+webpack快速开发框架
VueDemo_Sell_Eleme - Vue2高仿饿了么外卖平台
vue-leancloud-blog - 一个前后端完全分离的单页应用
vue-fis3 - 流行开源工具集成demo
mi-by-vue - VueJS仿小米官网
vue-demo-maizuo - 使用Vue2全家桶仿制卖座电影
vue2.x-douban - Vue2实现简易豆瓣电影webApp
vue-adminLte-vue-router - vue和adminLte整合应用
vue-zhihudaily - 知乎日报 Web 版本
Zhihu-Daily-Vue.js - Vuejs单页网页应用
vue-axios-github - 登录拦截登出功能
vue2.x-Cnode - 基于vue全家桶的Cnode社区
hello-vue-django - 使用带有Django的vuejs的样板项目
websocket_chat - 基于vue和websocket的多人在线聊天室
x-blog - 开源的个人blog项目
vue-cnode - vue单页应用demo
vue-express-mongodb - 简单的前后端分离案例
photoShare - 基于图片分享的社交平台
notepad - 本地存储的记事本
vue-zhihudaily-2.0 - 使用Vue2.0+vue-router+vuex创建的zhihudaily
vueBlog - 前后端分离博客
Zhihu_Daily - 基于Vue和Nodejs的Web单页应用
vue-ruby-china - VueJS框架搭建的rubychina平台
vue-koa-demo - 使用Vue2和Koa1的全栈demo
life-app-vue - 使用vue2完成多功能集合到小webapp
vue-trip - vue2做的出行webapp
github-explorer - 寻找最有趣的GitHub库
vue-ssr-boilerplate - 精简版的ofvue-hackernews-2
vue-bushishiren - 不是诗人应用
houtai - 基于vue和Element的后台管理系统
ios7-vue - 使用vue2.0 vue-router vuex模拟ios7
Framework7-VueJS - 使用移动框架的示例
cnode-vue - 基于vue和vue-router构建的cnodejs web网站SPA
vue-cli-multipage-bootstrap - 将vue官方在线示例整合到组件中
vue-cnode - 用 Vue 做的 CNode 官网
seeMusic - 跨平台云音乐播放器
HyaReader - 移动友好的阅读器
zhihu-daily - 轻松查看知乎日报内容
vue-cnode - 使用cNode社区提供的接口
zhihu-daily-vue - 知乎日报
vue-dropload - 用以测试下拉加载与简单路由
vue-cnode-mobile - 搭建cnode社区
Vuejs-SalePlatform - vuejs搭建的售卖平台demo
vue-memo - 用 vue写的记事本应用
sls-vuex2-demo - vuex2商城购物车demo
v-notes - 简单美观的记事本
vue-starter - VueJs项目的简单启动页
二十、其他实用插件汇总
vue-dragging- 使元素可以拖拽
Vue.Draggable- 实现拖放和视图模型数组同步
vue-picture-input- 移动友好的图片文件输入组件
rubik- 基于Vuejs2的开源 UI 组件库
VueStar- 带星星动画的vue点赞按钮
vue-tables-2- 显示数据的bootstrap样式网格
DataVisualization- 数据可视化
vue-drag-and-drop-list- 创建排序列表的Vue指令
vuwe- 基于微信WeUI所开发的专用于Vue2的组件库
vue-typer- 模拟用户输入选择和删除文本的Vue组件
vue-impression- 移动Vuejs2 UI元素
vue-datatable- 使用Vuejs创建的DataTableView
vue-instant- 轻松创建自动提示的自定义搜索控件
vue-slider-component- 在vue1和vue2中使用滑块
vue-touch-ripple- vuejs的触摸ripple组件
coffeebreak- 实时编辑CSS组件工具
vue-datasource- 创建VueJS动态表格
handsontable- 网页表格组件
vue-bootstrap-table- 可排序可检索的表格
vue-google-signin-button- 导入谷歌登录按钮
vue-float-label- VueJS浮动标签模式
vue-tagsinput- 基于VueJS的标签组件
vue-social-sharing- 社交分享组件
vue-popup-mixin- 用于管理弹出框的遮盖层
cubeex- 包含一套完整的移动UI
vue-fullcalendar- vue FullCalendar封装
vue-material-design- Vue MD风格组件
vue-morris- Vuejs组件封装Morrisjs库
we-vue- Vue2及weui1开发的组件
vue-form-2- 全面的HTML表单管理的解决方案
vue-side-nav- 响应式的侧边导航
mint-indicator- VueJS移动加载指示器插件
vue-ripple- 制作谷歌MD风格涟漪效果的Vue组件
vue-touch-keyboard- VueJS虚拟键盘组件
vue-parallax- 整洁的视觉效果
vue-typewriter- vue组件类型
vue-ios-alertview- iOS7+ 风格的alertview服务
paco-ui-vue- PACOUI的vue组件
vue-button- Vue按钮组件
原文链接:https://blog.csdn.net/qq_25838839/article/details/84613644
关注我的头条号,分享更多的技术学习文章,我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。
果你对数据分析感兴趣,希望学习更多的方法论,希望听听经验分享,
欢迎移步宝藏公众号「小火龙说数据」,无广告、无软文、纯干货,更多精彩原创文章与你分享!
1、OneTab:一键合并 tabTab 过多的时候,要关闭浏览器的时候OneTab可以帮助你快速的保存、整理浏览器。
2、掘金:最新的技术动态每次打开新的 tab 页面就可以看到最新、最热的技术文章。
3、markdown here超好用的 MD 编辑器,任何地方都可以把 MD 轻松的转换为富文本,我们可以把简书写好的文章(带md语法)直接复制到微信公众号啦。
4、Adblock Plus:免除广告困扰你是不是每次搜索百度前几个都是广告?有了它,你的搜索结果只有纯净。
5、LastPass:密码管理软件LastPass,全球知名在线密码管理工具之一,采用军事级加密算法,支持自动填充网站用户名和密码,与朋友分享登录信息等实用功能,且在全平台同步免费,无需订阅 Premium,即可在手机、网页、电脑端同步你的所有 LastPass 信息。
6、二维码(QR码)生成器在线的二维码生成器。最方便的用法是把当前的页面生成二维码,方便手机扫码快速访问。
7、下载+Chrome的下载管理在二级菜单里,进去很不方便。装了这个插件就可以直接看和管理,很好用。
8、Github 加速器一键加速 Github 访问速度,当 Github 访问慢的时候点击右键直加速,同时支持多个加速镜像。
9、购物党在线的比价工具,剁手党们赶紧装起来。
10、新浪微博图床简单好用的新浪微博图床,同时可以快速转换格式,HTML和Markdown等格式,支持浏览和删除历史记录。
11、crxMouse Chrome Gestures对于国产浏览器自带鼠标手势的功能,真觉得很方便!有了这款插件,也足够让你装B了。
12、Imagus图片放大镜的功能,在浏览新闻和博客的时候想右键看一下高清图,有了这个插件完全不用,鼠标悬浮就能看高清图片。
13、Save to Pocket看到感兴趣的先收藏着,然后走哪儿都能看,并且它由各个平台的版本支持,同时可以自动去广告,只把关键的内容保存,这样非常方便各个平台阅读。
14、网页截图:注释&批注网页截图,批注工具。
15、Image Downloader Chrome想下载某个页面的图片,不用再去资源里面一个一个看了,直接安装这个插件,一键就可以下载。
16、Google翻译Google翻译是一款由谷歌公司提供的网页划词翻译插件,它支持动态的划词翻译功能,也支持网页翻译,真是阅读外文网站的好帮手啊。
17、Lucidchart Diagrams - Desktop:在线绘制多种图表绘制各种流程图手头没有趁手的工具,直接试试这个工具哈。
18、Vimium:Linux 系统的 vim 编辑器快捷键功能能够在chrome中应用类vim快捷键进行操作,实现双手从鼠标上的解放,强烈推荐!
19、New Tab Startup Quotes:学习成功人士的格言每次打开新的 tab 都会有一个名人名言,不过是英文的,得思考一下才能理解其中的奥妙,如果你能做一个中文版就好了。
20、Search by Image:强大的以图搜图发现了一个图片,但是不知道他是什么,或者想搜索一些类似的,那么就用这个插件。
21、为什么你们就是不能加个空格呢 自动把网页中所有中文、英文、数字、符号之间插入一个空格。
22、Clear Cache点击图标即可清除缓存、cookie等,开发必备!
23、JSON ViewerJSONView 是一个方便查看 Json 结构的插件,展开,折叠,可以非常方便的查看接口返回数据。
24、Postman相信开发者朋友一定知道这款插件,非常方便的调用和调试 API 接口。
25、Octotreegithub上查看代码的时候总是一层层进入再出来,有点麻烦,有了这个插件,你可以想浏览本地 IDE 一样浏览 Github。
26、Table of contents sidebarTable of contents sidebar 可以让你在阅读很长篇幅的文章时候清晰的看到文章轮廓。
27、Tampermonkey俗称‘油猴子’,方便的管理插件的插件,你试试就知道如何的优秀。
28、Code ColaCode Cola是一个可视化编辑在线页面css样式的chrome插件。
29、WEB前端助手FE助手:包括字符串编解码、图片base64编码、代码压缩、美化、JSON格式化、正则表达式、时间转换工具、二维码生成器、编码规范检测、页面性能检测、栅格检测、JS运行效率分析等等你日常生活中不可缺少的插件。
30、sider:ChatGPT侧边栏轻松应用ChatGPT,实现Chrome与ChatGPT的联动应用,强烈推荐!
*请认真填写需求信息,我们会在24小时内与您取得联系。