精华内容
下载资源
问答
  • 行业选择组件
    千次阅读
    2022-03-14 13:41:42

    基本功能

    先了解一下那么多的注册中心组建,他们都需要提供哪些基本功能

    • 注册中心的API
    1. 服务注册接口:服务的提供方调用此接口完成服务的注册
    2. 服务下线接口:服务的提供方调用此接口完成服务的下线
    3. 心跳检查:服务的提供方调用此接口完成服务的状态上报
    4. 服务查询:消费者通过订阅或者定时拉取来获得注册中心的服务列表信息
    5. 服务变更查询:当服务发生变更的时候,消费者通过此接口获取最新的服务信息
    • 服务的高可用
    • 存储格式和位置
    • 服务健康检查
    • 服务状态变更通知
    • 白名单机制:生产隔离、灰度发布

    分布式系统一致性协议

     一致性协议的算法主要有:Paxos、Raft、ZAB

    • Paxos:是一种基于消息传递的一致性算法,学习成本比较高,它与传统的主备方式最大的区别就是:Paxos只需要超过半数以上的副本都还在线且相互通信正常,就认定集群或者分布式系统就还能够提供正常服务,而且数据不会丢失
    • Raft:它是Paxos的简化版,学习成本相较而言比较低,它跟Paxos一样,只要保证超过半数的节点都还正常就可以了,像Redis的哨兵模式其实就用到了Raft算法进行选举
    • ZAB:是zookeeper实现分布式数据一致性的核心算法,ZAB借鉴了Paxos算法,它不是通用的算法,而是专门为zookeeper设计的支持崩溃恢复的原子广播协议

    ZooKeeper

    探讨

    个人觉得ZooKeeper不适合做注册中心

    不过,从另个角度来看,它作为一个分布式协同服务,ZooKeeper的地位是无可厚非的,也是不二的选择,但是对于分布式架构中的注册中心就显得有气无力了

    因为ZooKeeper会有一种情况,当master节点因为网络故障或者其他原因与其他节点是去联系时,剩下的节点会重新选举leader,这个逻辑没问题,问题在于选举leader时间过长,而且选举过程中整个ZooKeeper集群是阻塞不可用的,这就会导致整个分布式系统直接宕机,在云部署环境下,因为网络问题使得整个zk集群失去master节点的事情出现还是可能性比较大的,虽然服务最终能恢复,但是长时间的服务不可用,在互联网行业,可能就会丢失大量订单流水,这就很难让架构系统接受这种情况的发生

    综上所述:如果是作为注册中心,可用性A要大于一致性C

    其实了解ZooKeeper的都知道,它是遵循CP原则的,它能够保证数据一致性,但是保证不了机器在下线或者宕机时服务的可用性


    疑问:为啥zk不能是AP呢?

    原因是zk使用到的是ZAB一致性算法,所有的设计都是为了实现强一致性,如果是用在分布式协调系统,用zk是完全没有毛病的,但是如果用于注册中心的服务注册与发现,就有点不太合适了


    Eureka

    Eureka的优势和运行原理等知识点,在这个标题下就不做赘述了哈

    通过Eureka的了解,他的设计思路就是为了解决注册中心的稳定性和高可用性

    Eureka为了保证注册中心的高可用性,容忍了数据的非强一致性,服务节点、Client-Server之间的数据都有可能出现不一致的问题,所以Eureka比较适用于跨机房、对注册中心服务可用性要求较高的使用场景,它也是专门为注册中心服务的微服务组件,出生就是注册中心


    Nacos 

    关于Nacos的基础知识,就移驾到我博客下Nacos专栏去看一下吧,这里就不做赘述了

    Nacos的话,个人觉得是最好的一个注册中心,只是个人觉得哈,非喜勿喷

    为啥呢,原因如下:

    • 是阿里出品,开源的,支持基于DNS和RPC的服务发现
    • 最主要的是它支持CP也支持AP,是可以配置的,毕竟灵活
    • 还有一个比较有趣的是,Nacos除了提供了注册中心的注册和发现功能,还提供了类似SpringCloudConfig远程配置中心的功能
    • 也有一套比较适用于中国人开发和使用的Web可视化页面,可以更直观、更精确的配置和观察节点信息

    Consul 

    这个基本知识同样不做赘述了

    Consul和ZooKeeper一样,遵循的是CP模型,它使用的是Raft来保证强一致性,而放弃了可用性


    ETCD 

    ETCD也是支持CP模型的,同样不支持可用性 


    综上所述

    在分布式架构中,牺牲可用性的ZooKeeper、Consul、ETCD在服务发现场景并没有多大的优势,反而Eureka和Nacos强调可用性,毕竟在服务发现场景中,可用性的优先级要大于一致性

    还有以下几种原因:

    1、CP和AP,在注册中心下,首选AP,所以只能从Eureka和Nacos中选择,那这俩怎么选择呢?我们开发使用注册中心或者使用其他工具第一个目的就是为了节省开发量,那就很显然,Nacos为开发节省了很多事情,如果是我,首选Nacos

    2、ETCD和Consul是用GO写的,而其他几个都是JAVA写的,论后期自行开发和维护再或者是找框架的bug,做JAVA的也很好入手

    3、高可用的话,没啥说,都支持

    4、社区活跃度的话,Eureka已经不更新了,而Consul业界都可以代替Eureka了,其他的都还很活跃,尤其是Nacos,毕竟是阿里出品嘛

    更多相关内容
  • 行业-电子政务-具有电泳等级选择组件的加油机.zip
  • 2021-2025年中国控制线缆组件行业目标市场选择策略研究报告.pdf
  • 2021-2025年中国光伏组件行业调研及渠道选择策略研究报告.pdf
  • 2021-2025年中国光伏组件生产装备行业调研及渠道选择策略研究报告.pdf
  • 相比传统的组件生产工艺, MBB 主要在电池图形设计及电池片间的互联工艺上发生改变,电池片采用更细更 窄的主栅,并在封装时采用圆形焊丝代替焊带。由于采用多主栅降低了电流损耗, 同时圆形焊丝相比焊带对于电池的...
  • 如今,随着市场由4G向5G网络解决方案迁移,蜂窝通信行业正在为实现更快数据传输速度、更低延迟以及容量、用户密度和可靠性的巨大飞跃奠定基础。例如,5G不仅可以提高数据速率(100倍)和网络容量(10倍),还可将...
  • 如今,随着市场由4G向5G网络解决方案迁移,蜂窝通信行业正在为实现更快数据传输速度、更低延迟以及容量、用户密度和可靠性的巨大飞跃奠定基础。例如,5G不仅可以提高数据速率(100倍)和网络容量(10倍),还可将...
  • 行业分类-设备装置-用于负载分接转换开关的选择器开关组件
  • 那个职业选择的数据大概有五千多条,有点多,需要拉接口调。这里写个模拟的,结构就是一级一级套对象,代码如下:function getJobs__list(level,arg1,arg2){ // 这是展示的 var Jobs__list = {

    设计图长这样:
    这里写图片描述

    如图,大概分为三级。点击事件上有个小trick要注意,那就是,第一级点击后显示第二级,第二级点击之后是toggle第三级。

    那个职业选择的数据大概有五千多条,有点多,需要拉接口调。这里写个模拟的,结构就是一级一级套对象,代码如下:

    function getJobs__list(level,arg1,arg2){
        // 这是展示的
        var Jobs__list = {
            'worker':{
                'coder':{
                    'shit-coder':'',
                    'bullshit-coder':''
                }
            },
            'buyer':{
                'mbuyer':{
                    'boybuyer':'',
                    'dadbuyer':''
                },
                'wbuyer':{
                    'girlbuyer':'',
                }
            },
    
        };
    
    
        if(level===1){
            var _jobs__flist = {}
    
            for(key in Jobs__list){
                _jobs__flist[key] = {}
            }
            return _jobs__flist
        };
    
        if(level === 2 && arg1){
    
    
            return Jobs__list[arg1]
    
    
        };
    
        if( level === 3 && arg1 && arg2){
    
            console.log(arg1,arg2)
    
            return Jobs__list[arg2][arg1]
    
        }
    
    }
    
    
    function getJobSearchResult(searchname){
        //这是用于搜索的
        var o = {
            'algricultrue':{
                'fish':{
                    'fish-buyer':{
                        securitylevel:'2',
                    },
                    'fisherman':{
                        securitylevel:'拒保'
                    }
                }
            }
        }
        o['algricultrue']['fish'][searchname] = {
            securitylevel : '1'
        }
        var results = []
        for( key in o){
            if(o.hasOwnProperty(key)){
                for(key2 in o[key]){
                    if(o[key].hasOwnProperty(key2)){
                        for (key3 in o[key][key2]){
                            if(o[key][key2].hasOwnProperty(key3)){
                                var s = ''
                                s = key + '-' + key2 + '-' + key3 
                                var so = {}
                                so[s]= o[key][key2][key3]['securitylevel']
                                results.push(so)
                            }
                        }
                    }
                }
            }
        }
    
        return so   
    }

    忽略丑丑的代码吧,这就是个很粗糙的假冒伪劣接口。

    这是个组件:

    Vue.component('stackedList',{
        template:"<article class='stackedlist'>\
        <div v-for='(f__value,f__key,f__index) in flist' :class='listkind+\"__flist\"'>\
            <header :class='listkind+\"__f\"' @click='showslist(f__key,f__index)'>{{f__key}}</header>\
            <article v-show='ssonshow[f__index]' :class='listkind+\"__slist\"' v-for='(s__value,s__key,s__index) of f__value'>\
                <header :class='listkind+\"__s\"' @click='showtlist(s__key,f__key,s__index,f__index)'>{{s__key}}</header>\
                <article :class='listkind+\"__tlist\"'>\
                <p :class='listkind+\"__t\"'  v-for='(t__value,t__key,t__index) of s__value' @click='select(t__key)' v-show='tsonshow[f__index][s__index]'>{{t__key}}</p>\
                </article>\
            </article>\
        </div>\
    </article>\
        ",
        props:['listkind','flist'],
        data:function() {
            return {        
                ssonshow:[],
                tsonshow:[],
            }
        },
        methods:{
            showslist:function(f__key,f__index){
    
                this.$emit('getflist',2,f__key)
    
                this.ssonshow[f__index] = true
    
                this.tsonshow[f__index] = []
    
            },
            showtlist:function(s__key,f__key,s__index,f__index){
                this.$emit('getslist',3,s__key,f__key)
    
                this.tsonshow[f__index][s__index] = !(!!this.tsonshow[f__index][s__index])
            },
            select:function(t__key){
    
                this.$emit('passvalue',t__key)
            }
        }
    })

    组件要套在Jobs组件中(jobs才是那个整体的大组件)

    
    Vue.component('jobs',{
        template:"<div class='jobs'><div class='info info__job'>\
                    <span class='pretip' >职业</span>\
                    <input type='text' class='answer' v-model='jobselected' placeholder='请选择职业' @click.prevent='togglejobbox(true,$event)'/>\
    </div>\
    <div class='jobbox--curtain' v-show='jobboxonshow'>\
        <div class='jobbox'>\
            <header>\
                <p class='jobbox__header'>查询职业类别</p>\
                <div class='jobbox__close' @click='togglejobbox(false,$event)'>+</div>\
            </header>\
            <input class='jobbox__search' type='text' placeholder='搜索职业' @input='showsearchresult' v-model='searchname'/>\
            <stacked-list v-show='!searchname.trim()' :listkind='listkind' :flist='flist' @passvalue='selectjob'  @getflist='getflist' @getslist='getslist'></stacked-list>\
            <article class='jobbox__searchresult' v-show='searchname.trim()' >\
                <p class='jobbox__searchresult__item' v-for='(securitylevel,searchresult) in searchresults'><span class='jobbox__searchresult__item__job'>{{searchresult}}</span><span class='jobbox__searchresult__item__level'>{{securitylevel}}</span></p>\
            </article>\
        </div>\
    </div></div>"
    ,
        props:['jobselected','flist'],
    
        data:function(){
    
            return {
    
                jobboxonshow : false,
    
                searchname:'',
    
                listkind:'jobbox',
    
                searchresults: {}           
            }
        },
        methods:{
    
            togglejobbox:function(ifshow,e){
    
                e.target.blur()
    
                this.jobboxonshow = ifshow ?  true :false ;
            },
    
            showsearchresult:function(){
    
                if(!this.searchname){
                    console.error('no searchname')
                    return
                }
    
                var results =  getJobSearchResult(this.searchname)
    
                this.searchresults = results
    
            },
    
            selectjob:function(jobvalue){
    
                this.$emit('selectjob',jobvalue)
    
                this.jobboxonshow = false
            },
            getflist: function(level,f__key){
                this.$emit('getflist',2,f__key)
            },
            getslist: function(level,s__key,f__key){
                this.$emit('getslist',3,s__key,f__key)
    
            }
        }
    })

    然后在主体的VM里挂上< jobs >< / jobs >即可,注意prop哦~

    这里其实有多个人都可以选职业,要注意把接口调用的数据返回放在一个vm中,多个组件共用一个性质。或者干脆就一个组件,只是v-model对应不同的人,做个区分就行。然后因为是一级一级查询的,要把数据先缓存在本地,如果Local查不到,再去调接口。

    展开全文
  • 行业资料-电子功用-具有可选择性调节的直接和间接内重整的内重整燃料电池组件的介绍分析.rar
  • JS 地区、职业、行业选择控件

    热门讨论 2013-07-24 20:46:25
    完整的地区、职业、行业JS选择控件,带样式的哦~
  • js职业选择控件

    2018-01-17 09:31:13
    js职业选择控件js职业选择控件js职业选择控件js职业选择控件
  • vue中使用vant中TreeSelect 分类选择组件

    万次阅读 热门讨论 2019-12-31 16:07:00
    在vue中使用vant中TreeSelect的组件 中文文档:TreeSelect 分类选择 效果展示: //先在你需要的页面中引入,第一个是弹出层,第二个是选择的 import { Popup } from "vant"; import { TreeSelect } from "vant"; ...

    在vue中使用vant中TreeSelect的组件
    中文文档:TreeSelect 分类选择
    效果展示:
    在这里插入图片描述

       //先在你需要的页面中引入,第一个是弹出层,第二个是选择的
    	import { Popup } from "vant";
    	import { TreeSelect } from "vant";
    

    代码部分:

        <van-popup v-model="policeShow" position="top" :overlay="true">
          <van-tree-select
            :items="items"
            :active-id.sync="items.activeId"
            :main-active-index.sync="items.activeId"
            @click-nav="onNavClick" 
          >
            <template slot="content" >
              <ul class="right-content">
                <li v-for="(item,index) in policeList" :key="index" 		   :class="{active:policeCode==item.policeCode}"  @click="onItemClick(item.policeName,item.policeCode)"> {{item.policeName}} </li>
              </ul>
            </template>
          </van-tree-select>
          <div class="btn" @click="onPoliceClick">完成</div>
        </van-popup>
    

    现在我来解析我的业务逻辑,希望对你能有帮助:

    1.首先:items,是个数组,我们需要给它传个数组过去,用来展示左侧的数据

    //这是我的后台传过来的数据,我将这个数据加到items里面去,左侧的数据将就展示出来了,注意这里是循环的数据,我为了简单这么写了,还有items中的key尽量用text,要不会渲染不上,在picker上面是有个value-key去改变的,这一会儿在下一篇文章中讲
    {
        "code": 200,
        "message": "success",
        "data": [
            {
                "substationCode": "1101010000",
                "substationName": "东城区分局"
            },
            {
                "substationCode": "100002",
                "substationName": "昌平区分局"
            },
            {
                "substationCode": "100003",
                "substationName": "海淀区分局"
            },
            {
                "substationCode": "100001003",
                "substationName": "海淀区分局"
            },
            {
                "substationCode": "1010101",
                "substationName": "昌平区分局"
            },
            {
                "substationCode": "1010101\t",
                "substationName": "111"
            },
            {
                "substationCode": "1000021",
                "substationName": "测试重复分局"
            },
            {
                "substationCode": "12223",
                "substationName": "河北分局"
            }
        ]
    }
          this.items.push({
                  activeId:substationCode,
                  text:substationName
          })
    

    2.我们要根据左侧的数据去渲染右侧的数据(右侧的数据是自定义的,所以你自己加事件就行)

    	@click-nav代码部分已经写了
    	onNavClick(index) {
           console.log(index)    
            let substationCode = this.items[index].activeId //这是我们通过index获取到当前点击的值
            this.requestPoliceList(substationCode) //这是请求右侧列表的请求通过activeId去请求。
        },
    

    总结:
    1.渲染左侧,将后台给你的值push到items里面(注意只能使用text)
    2.通过@click-nav获取当前的index并拿到id
    3.通过id渲染右侧的数据

    展开全文
  • 为减少永磁涡流耦合调速器由于结构...其次,连接板的数量选择8块时,在提高其低阶固有频率的同时,铜转子组件的力学变形和温升情况均可以达到最优化,上述研究结果可以为永磁涡流耦合传动器的减振降噪设计提供参考依据。
  • TODO朋友们有什么好的 idea 可以直接 pr,一个人的精力是有限的,行业的兴盛靠大家 仿 actionsheet 组件 可滑动tabview(无法用组件实现,页面看navbar) 仿 微信小程序设置界面 下拉选择列表重排序组件 左滑删除...
  • 封装属于自己的组件

    千次阅读 2021-03-17 17:50:28
    封装属于自己的组件库 - VUE「适合人群:一起聊聊组件这件事」「观看时间:30min」「说明:一些经验分享,欢迎探讨」前言现目前,vue 社区下大大小小的组件库是越来越多,优秀的开源组件也越来越丰富,比如PC:View ...

    2e16910e3529d6715485dcf3e0007780.png

    封装属于自己的组件库 - VUE

    「适合人群:一起聊聊组件这件事」

    「观看时间:30min」

    「说明:一些经验分享,欢迎探讨」

    前言

    现目前,vue 社区下大大小小的组件库是越来越多,优秀的开源组件也越来越丰富,比如

    PC:View ui,Element ui, BootstrapVue ,Ant Design Vue,微软的MS Design,地图的:vue-baidu-map,vue-amap,图表的vue-echarts,vue-easetable,还有其它很多很多

    Mobild:Vux,Vant等,最近火热的Futter

    那么,在框架搭建之前如何选择一个合适的组件库,在开发过程中如何挑选优秀的开源组件,公用的部分如何封装为业务组件,项目积累下来的功能组件如何去积累维护,是我们该去思考的

    如何选择一个合适的组件库(选型)

    不管是快餐项目型还是架构持续完善型的架构,在搭建架构时,选择一个可靠合适的 UI 组件库至关重要,关系着系统架构后期的维护,组件的积累,项目的沉淀。一旦选择了一个不成熟的组件库,整套架构就会处处踩坑。那么如何选择一个合适的组件库

    对比

    1.1 对比 github-Star 的数量,能够从侧面反映开源项目的受欢迎程度

    1.2 对比组件美观和交互体验,快餐型架构可以选择特定业务关系相似的框架

    1.3 对比社区,一个相对完善和活跃的社区对组件的维护将会越来越完善

    1.4 对比 API 的稳定性,完善性,对于开发人员来说,可靠的 API 再重要不过了

    实践 + 实现

    2.1 不管是组件库还是一个功能组件,实践是检验组件是否好用最真实的做法,将你选择的组件自我使用体验以得到最真实的反馈

    符合业务

    根据自身业务去选择对应的技术方案,会给开发过程减少一些不必要的麻烦,业务型和展示型的业务选择对应的 UI 框架会事半功倍

    咨询

    咨询一下行业大佬也是一种捷径

    实例:王二狗在架构转型选择 UI 组件库的时候,对比了 iview element bootstrap 的 github-star,组件数量,组件的 API,最后也咨询了多年在前端打拼的同事,最后选择了 iview(view ui),到目前未知,一直基于 view ui 优化完善架构,积累组件,其中大量业务组件依赖于 view ui,若王二狗想要将架构转换为 element ui,就要丢弃基于 view ui 的业务组件,若两者组件库多使用,有可能造成工程庞大,维护困难,所以在 UI 组件库选型的时候,慎重考虑,很有可能就会成为一直陪伴你的伙伴了~

    如何挑选优秀的开源组件

    除了挑选合适的组件库之外,开发过程中遇到一些组件库没有的组件,就需要我们自己来想法搞这样的组件,那么其中一种方法就是找优秀的开源组件,如何找,先百度,再去 github 搜索,还可以去掘金/知乎等社区找,找到能够满足我们功能的组件后,实现出来,没有的组件就需要我们自己来编码实现,作为我们积累的功能组件

    那么众多的组件中如何挑选出符合我们要求的组件:

    首先挑选出功能要求符合的组件列表

    其次对比扩展性和美观,扩展性好的优先,更加友好的体验优先

    最后,实践实践实践,组件好不好用,别人说了不算,放在我们项目实现出来

    🤔 功能组件如何去积累维护

    除了挑选合适的组件库之外,项目开发过程中,项目经理总会有一些莫名其妙的想法,一些奇葩的交互组件,这种情况下,有两种解决方法,一种是找到替换方案用你的三寸不烂之舌说服项目经历,第二种就是乖乖的听话去实现。工作之初通常会选择第二种,工作久了通常会选择第一种,如果你工作了 1-2 年,还是处于第二种,那么大佬可以反思一下了

    🤺 那么我们自己开发的组件究竟如何积累和维护:

    怎样的组件值得维护

    满足以下条件的组件值得维护:

    较好的交互体验

    社区没有满足我们需要的

    经常使用的,但是不要我们具体的业务产生高耦合度

    组件封装的思想理念

    如果我们把一个组件从编码到展示分为展示层,数据处理层和 API 层

    那么,我们封装组件要做的其实就是将显示层和数据定义给处理好,固定的数据格式对应我们的组件模板

    如果我们把一个组件放在 MVVM 模型中(其中这里 VM 视图模板我把它作为了我们父组件的一种抽象控制器 Control

    那么,我们封装组件要做的就是视图和模板,由父组件的控制器来控制我们的组件展示

    72b55a2bb646a535479e325401a9aa5a.png

    建立文档说明

    一个好的组件能让自己记忆更久的方法就是建立文档,有了文档也可以给到团队的其它成员共同使用,像常见的 UI 组件库都有自己的文档,那么我们如何来建立自己的文档

    文档的内容要简单明了,组件示例/props 参数说明/events 监听事件说明/slot 插槽说明,如有内部事件暴漏出去,添加其它事件说明

    文档模板,一,我们可以自己搭建文档维护说明;二,我们可以使用文档编写的开源项目;vue 官方推出的一款VuePress(我采用的是第一种,因为当时不知道有 VuePress 这个开源项目),感兴趣的自行了解

    vue 组件开发常用 protype

    model, 绑定 value(非默认必须是包含在 props 的), 绑定事件(如果时自定义需要通过 emit 创建事件)

    props, 我们封装组件最好把 prop 的类型和默认值都定义了并且说明清楚,验证规则 validator 实际应用中还没有用到

    emit, 自定义事件

    $refs, 获取内部暴漏的事件

    slot, 插槽,我们自定义显示内容的好方法,数据的传递,$slots都是我们需要掌握的部分。数据的传递有新的和旧的两种写法,例子

    // 旧写法

    ;

    // 虚拟节点实例

    ;

    // 新写法 注意:新的插槽节点必须叫template,用div不行...实际用过

    ;

    // 虚拟节点实例

    ;

    ;

    复制代码

    开发业务组件

    业务组件,什么样的组件称为业务组件,我们在项目开发过程中,某个界面的详情,可以在系统各个地方调用,这样的组件需要我们封装为公共的业务组件供系统使用,如果有人问为什么不复制,那用 vue 干嘛呢?

    👀 如何判断哪些是公共的组件?

    习惯,平时的开发就养成组件拆分的习惯,不管组件是否公用,都不会错!

    在开发中,首先了解业务,想当咸鱼的那也没办法,靠习惯吧~了解了业务,自然就知道哪些组件是需要封装出来的了

    在项目多处重复,在多处场景调用的组件,可以封装为公共组件

    👀 封装业务组件有什么需要注意的?

    组件的目录存放位置要建立好,有其它成员的话要通知到

    组件的使用地方最好能做好注释,方便后期运维

    组件封装注意事项

    注释,不管是公共组件还是其它组件,注释这个习惯的问题还是强调一下,最好有注释规范

    命名,公共组件命名一般和他人形成统一的规约,比如自定义监听事件统一‘on-’开头,参数使用驼峰命名

    自定义的图片路径,不要将我们的图片路径限制死,封装组件最好开放出来

    私有样式,避免污染其它模块,当然其它组件也要注意私有样式的属性添加

    组件库的发布

    为什么要发布组件库,如果你在维护很多很多的项目,那我们这些项目依赖的这些自己封装的组件总不能在每个项目进行复制吧,多孬啊~虽然之初我就是这么做的...现在最常见的就是将自己的组件包发布在npm仓库,通过npm install ** 安装到自己的项目中

    那么,组件库达到什么样的一个体系值得发布也是一个值得思考的问题。其实组件库的发布不是由组件的多少决定的,而是由你的思想决定的,如果你有了这种组件抽象,组件积累的思想,那么即使是一个小组件也可发布甚至开源~像我们平时用到的很多这样的小组件,比如拖拽组件/轮播/tree等开源的单个组件也是很多的,所以组件库/组件达到什么样的体系不重要,重要的是我们封装组件的这种思想

    如何发布一个自己的组件库,封装+发布

    封装:vue官方插件这一章节简单的介绍了vue插件的安装方法,也就是我们该如何封装; 再者,下载element ui/view ui 这种优秀的开源组件库,参考一下,站在巨人的肩膀上,我的组件库参考了view ui的封装方法

    发布:发布就简单了,网上的资料也是一大堆,如何发布第一个属于自己的npm包,这里我再简单说一下流程和注意事项

    修改package.json的几个重要配置项

    // 包的名称

    "name": "ui",

    // 版本号,第一次发布就随便了,后面更新的版本号要递增

    "version": "1.6.8",

    // 发布出去的包默认的访问文件

    "main": "src/index.js",

    // 发布的文件集合,可以发布多个文件夹

    "files": ["src"],

    复制代码

    需要自己注册npm账号,执行npm publish 发布,会自动提示输入账号密码的

    npm publish

    复制代码

    这样你的包就发布出去了,很简单吧,验证的话,就在你的项目里,npm install ui,然后在主文件导入注册...就不细说了

    组件的更新

    封装的组件只有有人用了才能发现问题,人无完人,何况可能没有用过的组件呢,也有不同场景可能加入一些新的支持,都是需要我们来更新组件库的。这里主要说一下更新的注意事项

    注意事项:

    更新的版本号每次要记得修改,同样的版本号更新会提示你无法更新的,低于版本号也会提示无法更新的

    组件新增功能,新增功能的话要在原有功能不变情况新增,当然着取决于我们实际的使用情况,如果你的组件没有在任何地方用,那就随便更新了

    组件有新增功能记得补充文档哦

    更新记录记得补充

    实践,在日常项目中,使用的组件不能支持某功能,因为没有专门的研发组,为加快进度,组件的修改直接在 node_modules 依赖包内进行修改,多的话做好记录,空闲之余再把内容更新至组件库;

    结语

    以上是工作过程中自身实践的一些总结,其目的就是提高开发效率,减少重复性工作;在平时封装自己的组件时,没有良好的指引,都是自己一路厮杀,尝试出来的,如果你身边有良好的维护环境,珍惜吧,如果没有,希望本文对你有帮助~工作中,能用开源的尽量用开源的,开源的真香!

    本文使用 mdnice 排版

    展开全文
  • 两列联动的picker(行业选择

    千次阅读 2018-12-14 17:17:39
    //console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ multiIndex: e.detail.value }) }, bindMultiPickerColumnChange: function (e) { //console.log('修改的列为', e.detail....
  • 前端组件封装原则

    千次阅读 2022-04-17 19:46:25
    但是在很多的时候,对于一些刚刚进入这个行业的新人来说,可能有部分的老人,不是很清楚什么时候应该去封装组件。 接下来我就以下的问题聊一下组件的封装。 我们为什么要封装组件? 什么时候应该封装组件? ...
  • 级联组件-cascader_element-ui 目录 文章目录1、常用属性2、事件3、全加载和懒加载3.1、全加载3.2、懒加载3.3、对比3.3、数据回显问题与解决方案4、应用场景5、美化***后记*** : 内容 已很常用的省市县3级地区...
  • jmeter组件介绍

    千次阅读 2022-03-16 10:26:06
    案例 电梯行业规范:电梯从1楼到5楼的运行时间不超过24s 1人 20s 7人 20s 13人 20s 达到最大负载 16人 25s 19人 28s 21人 断绳子 注意 通过负载测试,可以确定系统的最大负载量和极限负载量 系统对外宣称的最大负载...
  • 光伏作为新兴能源这几年在中国发电市场增长迅速,尤其是最近国家...组件—逆变器—并网发电简单的这么一个步骤,我们要细化每一个环节的产品选择,这样才能够获得最大的投资收益。 笔者通过对一些项目的了解,以及多...
  • 如何去拆分项目中的组件?

    千次阅读 2020-04-14 08:00:00
    如何去拆分项目中的组件?React 组件会随着时间的推移变得越来越多。还好我意识到了这点,不然我的APP组件将变得非常的大。但事实上是一个问题吗?虽然创建许多只使用一次的小组件似乎有点...
  • 多样的功能组件,不受行业框架限制,可自由组合适应当前场景,让您轻松满足客户的定制需求。 大量插件可用,实现多样营销功能 积分签到、积分兑换商城、拼团、店内点餐、手机客服等插件可用,满足各种行业场景营销...
  • 从2008年9月23日发布 Android 1.0开始到现在的 Android 12,它已经历十三个年头,在这过程中经历了层层的升级改变…… 随着 Android 版本的不断更新升级和用户对 APP 产品需求技术...而对于在 Android 开发行业
  • 电子监视和蜂窝通信技术的发展进步为远程监视提供了更多,更简单和更便宜的选择。 但是,由于2G和3G蜂窝网络服务即将停止,因此,许多现有的监视系统将需要重新设计以在其他蜂窝网络上运行。 开发了一种土壤水分...
  • 可以说,EC2的出现的的确确改变了Infra的世界,改变了服务器行业的整个生态圈。用AWS官方的话说,“使用 Amazon EC2 可避免前期的硬件投入,因此您能够快速开发和部署应用程序。通过使用 Amazon EC2,您可以根据...
  • openstack及其核心组件

    千次阅读 2021-01-27 01:27:35
    openstack及其核心组件云计算概述基本特征发布模型服务类型IAAS(基础架构即服务)PAAS(平台即服务)openStack概述优势核心组件概念架构逻辑架构通信关系 了解openstack之前我们要先了解云计算这个概念 云计算 概述...
  • 文章目录使用意义基础使用给组件添加属性单一根元素 使用意义 有时候一组HTML代码可能会在多出使用(比如页眉页脚)。如果我们把这样的代码到处都进行复制粘贴,虽然一时方便了,但后期维护代价非常高,而且代码重复性较...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 81,410
精华内容 32,564
热门标签
关键字:

行业选择组件