首页 文章 精选 留言 我的

精选列表

搜索[get],共10005篇文章
优秀的个人博客,低调大师

Failed to get D-Bus connection: Operation not permitted —解决Docker中Cent...

1.解决Docker中CentOS镜像无法使用systemd的问题 如果这让你觉得麻烦,那么你可以直接跳到本文第二部分开始阅读 创建DockerFile mkdir /root/centos-systemd cd /root/centos-systemd vim DockerFile FROM centos:7 ENV container docker RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \ rm -f /lib/systemd/system/multi-user.target.wants/*;\ rm -f /etc/systemd/system/*.wants/*;\ rm -f /lib/systemd/system/local-fs.target.wants/*; \ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*;\ rm -f /lib/systemd/system/anaconda.target.wants/*; VOLUME [ "/sys/fs/cgroup" ] CMD ["/usr/sbin/init"] ESC :wq 下载镜像并命名为centos-systemd:7 cd /root/centos-systemd docker build --rm -t centos-systemd:7 . 通过centos-systemd:7镜像生成一个名为centos-systemd的容器 docker run -d -i -t --privileged=true --name centos-systemd -v /sys/fs/cgroup:/sys/fs/cgroup:ro centos-systemd:7 连接到名为centos-systemd的容器 docker exec -i -t centos-systemd /bin/bash 测试systemd启动是否成功 systemctl --help 2.使用已经创建好的镜像(本文第二部分) 也可以下载我已经做好的一个支持systemd的镜像 # 下载镜像 docker pull 2233466866/centos-systemd # 通过镜像运行一个名为test的容器 docker run -dit -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name=test --privileged=true 2233466866/centos-systemd

优秀的个人博客,低调大师

AI、数字家庭、物联网、创新芯片……3天Get智能时代

人类对于质感生活的追求转变为”智感”,智能家居、智能出行……正潜移默化的改变着人们的生活。 人工智能、新能源汽车、物联网、数字家庭绝对是当下最热门的话题,这些关键词刷新了人类认知信息库的同时,全新的系列科技产品也在前赴后继涌入生活大潮之中。 智能让生活更有质感 人类对于质感生活的追求转变为”智感”。数字家庭,智能家居也开始成为时尚的弄潮儿,潜移默化地影响着居家生活。 想象着这样一个画面:你躺在沙发上看电视,用遥控器煮了咖啡,让电视机帮你煮饭,冰箱告诉你藏在里面的牛奶要过期了,当然你的电视机还能猜出你的心情,你的空调也发现了你的愉悦,给你自动播放音乐调节气氛…… 同样,对于品牌和企业而言,新时代的大国经济就是由中国制造向中国智造转变。智能创新则是核心。TCL(CITE2018展位号1E050)采用最新一代原色量子点技术的X6 XESS获得2017德国IFA“量子点技术金奖”,另外全新一代TCL人工智能小T已经实现了高质量的图像识别,视频理解,语义分析,以及机器学习和深度学习等,提升了人机互动的体验。目前TCL在世界范围内已经拥有了26个研发中心,7000多名研发人员,TCL每年的研发投入达销售收入的4%以上,2016年研发投入42.7亿元。TCL还在多个前沿科技领域率先布局,包括印刷显示技术、AI人工智能、大数据、及显示技术等前沿技术的研发。 图1:TCL X6 XESS 同样是家电,海尔(CITE2018展位号1D120)在智能家居方面的表现也十分卓越。智能空调在近几年甚嚣尘上,“智能”可以划分为两级:一是单品智能、人控制空调,二是互联互通主动服务人。海尔通过独家发布智慧空气方案主动服务用户,把智能空调手机操控作为基础功能。在此基础上,海尔还升级一站式主动服务,通过成套智慧网器互联互通,提供全场景定制化的智慧空气体验。当然这些只是智能空调的第一步,前途有趣且光明。 世界触手可得已经不再是一句口号。全球智能家居在2015年就达到了485亿美元,预计2018年市场规模达到710亿美元。美国和韩国在全世界领先行列,当然中国也不甘于落户后疯狂追赶。中国智能家居专利申请量全球第一,智能家居行业已经进入高速增长期。 万物互联,新能源助力新出行 智能居家的问题解决了,智能出行的问题也得到了重视。我国汽车行业的第二次变革已经来临,汽车的电动化、智能化、网联化也是改革的关键词。 发展新能源汽车是全世界汽车业的共同目标,中国新能源汽车推广取得了全球瞩目的成就,从国家到地方层面都给予了大力支持,车辆购置补贴、限行限购等手段为新能源汽车的推广创造有利条件。习近平总书记提出:发展新能源汽车是我国从汽车大国走向汽车强国的必由之路。国家最高领导人号召,发展新能源汽车,新能源汽车的发展在中国七大战略性产业中的地位尤为突出。 在政策利好、市场持续增长的推动下,各大主要整车制造企业纷纷加大了新能源汽车产品的投资与研发,并提出了未来新能源汽车发展的明确目标。广汽传祺(CITE2018展位号8B03)展会现场将重点展示的荣威Ei5,Ei5是荣威纯电动设计语言的首次量产演绎,随着进入电动化时代,“律动设计”也有所进化:更富意境的洗炼,更富情感的精妙,更加东方的韵律,更加灵动的舒展。相较于严谨的“律”,Ei5在设计过程中更加注重优雅的“韵”的雕琢。 图2:荣威Ei5 相较传统汽车,新能源汽车仍存在一次性购置成本高、续航里程短、充电时间长、充电网点少等弊端,导致目前仍无法有效打开私人消费市场。也正因为新能源竞争格局尚未完全形成,发展新能源汽车是促进我国汽车产业转型升级紧迫任务,也是时代的选择。 物联网与人工智能的化学反应 AlphaGo一战成名后,世界的焦点都转向了人工智能,经过两起两落的”颠簸人生”再次被追捧。2017年7月国务院发布《新一代人工智能发展规划》中提到:新一代人工智能发展分三步走,2030年使人工智能理论、技术、应用总体达到世界领先水平,人工智能作为国家战略的规划正式展开。 国家政策的大力支持也催促了人工智能的实际发展,很多创业项目抢滩人工智能领域,人工智能产业作为互联网发展的新风口也进入了爆发期。 人工智能的应用也由专用领域不断向通用领域扩展,其应用当然依赖于人工智能技术平台,作为中国人工智能的顶尖研发团队,科大讯飞(CITE2018展位号5B05)多次在Winograd Schema Challenge、Stanford Question Answering Dataset等国际级别的AI赛事中荣获全球第一的桂冠。科大讯飞在CITE2018展示的讯飞晓译翻译机能够快速、准确的实现中文与日语、韩语、法语、西班牙语、以及维语、藏语间的即时互译。搭载全球首款NMT离线引擎,无须网络亦可实时翻译,大家风范可见一斑。 图3:讯飞晓译翻译机 当然,人工智能的技术无法独立产生价值,联想集团此次携集团整体产品线亮相CITE,其执行副总裁兼中国区总裁刘军在2017年联想创新科技大会上提出智能物联网时代,人工智能与物联网相结合,这也是业界首次从技术融合角度提出这一概念。2018年是世界物联网元年,是物联网强国爆发性增长的起步之年。未来智能物联网的核心是服务,并不仅仅是产品本身。刘军强调:因为智能互联时代的产品是相对碎片化的,所以我们要用一个生态的方法,联合国内的多家创新企业来为客户打造可信赖的产品和服务。联想表示将在产品、渠道、服务、AI、资本等方面发力,更加务实地催化智能生态。 技术角度而言中国AI领域发展如此迅猛发展离不开面部识别和智能芯片的成就,中国科技巨头腾讯投资ObEN,百度京东也各有动作,2018年必将是中国芯片“大战”之年。在芯片领域的科技创新中紫光集团(CITE2018展位号1B010)一直走在行业最前端,作为全球第三大手机芯片设计企业紫光耗资10亿美元,1000人团队历时两年研发成功国内第一颗32层三维NAND闪存芯片,同时紫光研发出国内首款拥有自主嵌入式CPU关键技术的手机芯片平台。以“自主创新加国际合作”为“双轮驱动”的紫光已经形成了从“芯”到“云”的高科技产业生态链,在全球信息产业中强势崛起。 需求催生供应,人工智能、智能汽车、物联网的高速发展,国家政策的大力扶持,在多方助力作用下,国产芯片产业发展之势迅猛,弯道超车势在必得。 在中国电子行业迅猛发展的大环境下,作为中国最权威的电子行业展览会--中国电子信息博览会每年都会向全球展示出中国创新电子产品,展现中国技术实力和创新能力。2018年4月9-11日由工业和信息化部、深圳市人民政府主办的第六届中国电子信息博览会将在深圳盛大举行。 中国电子信息博览会是一个汇集国内主流电子企业的最大行业展会之一,也是电子行业人士不可或缺的盛会,已逐渐成为行业领先、亚洲第一、世界一流具有国际影响力的电子信息产业年度盛会,可以说它见证并推动了中国电子科技的发展。本次深圳场馆展示规模达10万平米,专业观众超10万人,2000多家展商展示包括人工智能、数字家庭、新型显示、智能终端、锂电新能源、新能源汽车、车联网、高端芯片、物联网等电子信息最新技术成果。其中重点打造的人工智能馆将与科大飞讯共同展示人工智能全产业链。 图4:CITE2017展会现场 为了让广大展商和与会人士能够进行深入的技术交流,博览会同期将举办“1+2+5”高端论坛,还将组织系列商贸洽谈活动及国际产业交流活动。“1+2+5”模式即:数字经济前沿论坛、CIO峰会+Top10峰会、5场企业家峰会,特邀行业顶尖专家和行业领军企业以及行业风云人物发表演讲,博通有限公司首席执行官陈福阳、紫光集团董事长赵伟国、蔚来汽车董事长李斌、联想集团执行副总裁兼中国区总裁刘军等行业大咖将亮相峰会。 1--数字经济前沿论坛 时间:2018年4月9日:上午10:00-12:00,下午14:00-16:00 国家有关部门表示,为加快数字经济发展,我国将持续完善政策环境,制定出台数字经济发展方面的政策性文件,研究进一步推进“互联网+”行动的政策措施。新一代信息技术创新的制高点如何抢占,数字经济技术如何迭代演进,从脑科学到人工智能的前沿话题,中国科学院院士黄维,信息交叉科学研究专家、中国工程院院士戴琼海将在论坛中具体讲述。 作为全球最大无晶圆厂半导体公司之一的博通有限公司首席执行官陈福阳将参与本次高端论坛,他将以“加快网络技术创新,支撑数字经济发展”为切入口与众位企业家分享博通发展战略与市场趋势。 全球第三大手机芯片企业紫光集团董事长“并购狂人”赵伟国日前透露:紫光集团已经完成产业布局,将从并购过渡到自主研发为主。届时赵伟国也将作为数字经济论坛主讲人以“从芯到云跨越式发展,塑造国际重科技企业”为主题分享紫光集团2018年的战略布局。 图5:紫光集团 赵伟国 凭借“中国新车第一股”概念和顶级背景成为舆论焦点,蔚来发布全球最快电动超跑EP9,有报道称蔚来汽车预估融资20亿,年内要赴美上市。本次经济论坛蔚来汽车董事长李斌先生将就”开辟融合发展新模式,打造智能汽车增长极”这一主题揭秘蔚来汽车的超速发展之路。 值得一提的是,戴尔科技集团大中华区总裁黄陈宏、创维集团有限公司董事长赖伟德、曙光信息产业股份有限公司总裁历军、联想集团执行副总裁兼中国区总裁刘军、深圳市大疆创新科技有限公司总裁罗镇华、江苏长电科技股份有限公司董事长王新潮等电子信息各领域知名的企业家,他们也将在论坛展开一场重型产业与新兴科技、产业大鳄与独角兽企业的跨界与融合、竞争与协同的尖峰对话和理念交锋,将会迸发出无数的创新灵感和思想火花。 2—CIO峰会+ TOP10峰会 如何响应技术的快速迭代,如何加速数字化进程,如何构建数字化核心能力,成为摆在企业管理者,尤其是企业信息化负责人面前的核心工作。CIO峰会即是这场变革的见证者,同时也是参与者、引领者。这不仅是一场新一代信息技术创新的盛宴,更是一场创新思维的头脑风暴!工信部领导与数十位企业家将就”数字化转型与领导力提升”做出相关报告与对话,工业和信息化部原副部长杨学山将以”数字化转型与CIO角色再定位”为主题发表讲话,戴尔大中华区总裁黄陈宏将就”将数字化转型之路坚持到底”作出报告。 图6:CITE2017 研讨现场 另外一场TOP10峰会,将重点探讨行业龙头企业如何利用新技术、新业态、新模式培育企业发展新动力,如何打造核心竞争力,企业发展过程中如何能得到政府更好的支持和帮助等等这一系列问题。TOP10圆桌会议通过工信部、广东省以及深圳市等相关行业主管领导和数十位中国电子信息行业领军人物将会以圆桌讨论的形式,掀起一场全面激烈的头脑风暴! 3—五场行业企业家峰会+其他 五场企业家峰会——中国锂电行业企业家峰会、中国人工智能行业企业家峰会、中国显示行业企业家峰会、中国智能电视行业企业家峰会、中国智能手机行业企业家峰会。全面聚焦当前行业最热门话题,各行业主管领导、两院院士、行业顶尖企业家等将会在不同的峰会上碰撞出思想的火花,精彩程度可以想象。 图7:CITE2017 展会现场 除此之外,CITE2018还将举办100余场同期活动,涉及区块链、物联网、智能制造和机器人、智能网联汽车、知识产权、SiP技术、绿色计算、中欧交流等多场行业论坛。CITE2018还将继续推出“中国电子信息博览会金奖”及“中国电子信息博览会创新奖”评选活动,究竟花落谁家,只待CITE2018现场一探究竟。 本届的中国信息博览会不仅是一场高端电子产品方案的展示会,还是一场业界权威关于电子行业现状的思想交流会,更是中国电子产业发展道路上一座重要的里程碑。它将成为世界展示2018年中国科技乃至世界科技的风向标! 原文发布时间: 2018-03-30 15:05 本文作者: 韩璐 本文来自云栖社区合作伙伴镁客网,了解相关信息可以关注镁客网。

优秀的个人博客,低调大师

教你考核数据中心级交换机 分分钟get起

最佳数据中心级交换技术能够帮助企业大幅度提高性能、可用性和简化管理。但是要了解不同供应商产品之间的差别却很有难度。本文将介绍一些可用于区分最佳数据中心级交换机产品的场景和特殊分类,它们能够指导我们确定最适合自己的选择。 虽然数据中心级交换机目前主要由大型企业使用,但是任何公司都在采购这种交换机时都应该重点考虑下面六个方面: 1. 物理需求 2. 聚合网络 3. 吞吐容量 4. 电源与冷却需求 5. 虚拟交换机与SDN支持 6. 单一供应商支持 对于这些方面,每一个供应商都有各自不同的处理方法,但是它们通常区别不大。大多数产品都包含以下方面,所以我们将在后面详细介绍: • 物理端口密度与吞吐量 • 聚合网络与光纤通道(FC)支持 • 虚拟服务器集成与交换机支持 • 端到端策略与未来概念验证 物理端口密度与吞吐量 数据中心级交换机在物理端口密度方面有不同的形状与大小。但是,不同的架构能够反映了一种特定传输类型所能支持的物理端口数量有多少。许多数据中心级交换机都基于刀片机架,它们支持使用不同端口类型和密度的不同线卡。 最大型的交换机出自思科、瞻博网络和Arista。例如,16插槽的思科Nexus 9500最多支持2,036个10GbE端口或576个40GbE端口。这种密度曾经是无所匹敌的。但是,瞻博网络的QFX10016已经能够达到同等的 密度,而Arista 7300系列也接近这个密度。此外,瞻博网络和Arista都宣称自己的线卡吞吐量达到6Tbps左右。思科的线卡动态吞吐量只有不到4Tbps。另 外,Arista 7328交换机还提供了25GbE和50GbE接口卡,这和瞻博网络的QFX 5200交换机一样。 最大带宽的实现取决于多个因素,其中包括所使用的可用结构模块和管理模型类型。此外,在数据中心的最重要特性中,延迟也是一个关键指标——即交 换机传输数据帧与数据包的时间。这个方面是Arista和Extreme Networks这样的公司占据优势。Arista在高频交易行业很受欢迎,因为它的超低延迟交换机能够在250纳秒左右完成数据帧和数据包的交换。在与 供应商BlackDiamond的x8核心交换机组合使用时,Extreme的X770交换的设计延迟时间小于600纳秒;其他数据中心级交换机产品也支 持毫秒级速度。思科也很快发现了这个利润丰厚的市场,开始在自己的Nexus交换机生产线上开发基于Algo-Boost技术的特殊产品,以对抗 Arista和Extreme的产品。如果低延迟在数据中心战略的重要考虑因素,那么一定要仔细了解思科、Arista和Extreme的产品。 如果物理端口密度和性能是最重要的需求,那么Arista、思科和瞻博就是最好的选择。这些顶级供应商支持最高的端口密度,其单线卡性能都在3Tbps以上。 聚合网络和光纤通道支持 遗留存储网络通常部署在相互独立的物理网络上。存储区网络(SAN)使用光纤通道协议和交换硬件,而局域网(LAN)流量则使用标准以太网协议和硬件。协议和硬件的最新改进使SAN和LAN流量现在可以使用相同的物理线路和交换设备。 光纤通道连接可能采用原生形式或通过以太网光纤通道(FCoE)接口。如果需要支持其中一种或两种连接方式,那么一定要记住:并非所有交换机供 应商和模块都支持所有的协议。例如,Arista就不支持光纤通道。因此,如果需要在任何情况下使用光纤通道,则应该找其他供应商的产品。思科、惠普、华 为(主攻欧洲和亚洲市场)和瞻博等公司的数据中心级交换机都支持两种类型的光纤通道。 例如,瞻博QFX 3500与QFX 10000系列和华为CloudEngine 6800系列交换机都支持所谓FCoE-FC网关的光纤通道。这意味着物理接口既能连接原生光纤通道,也能连接以太网封装的FCoE。在思科Nexus 5000系列上,小型的可插拔接口可能是标准以太网,也可能是FCoE。因此需要给交换机单独增加专用的光纤通道模块。在2015年5月,思科在它的96 个端口的16GbE光纤通道交换机上支持聚合网络,并且在Nexus 7700和7000交换机上支持40GbE。 此外,如果用户非常依赖于原生光纤通道,并且计划继续使用,那么Brocade就成为必然选择。Brocade支持所有的光纤通道实现技术—— 包括16Gbps Gen 5原生光纤通道。而且,据说Brocade还会在不久推出32Gbps Gen 6产品。如果计划在不久的未来整合LAN和SAN网络,那么选择正确的供应商就至关重要。 虚拟服务器集成 像VMware vSphere、微软Hyper-V和KVM这样的服务器虚拟化软件都有自己的虚拟交换机,它们负责执行同一刀片服务器机架内各个虚拟机之间的交换功能。 对于一些组织而言,内置的虚拟交换机工具就已经够用了。但是,通常企业级环境需要在交换机端口上实现更细粒度的控制,这样才能像管理物理的数据中心级交换 机一样去管理虚拟化的数据中心级交换机。新的数据中心技术改进需要在多个数据中心交换上叠加实现二层网络。其中一种非常流行的做法是使用VMware的 NSX平台。许多数据中心交换机供应商现在都支持不同级别的NSX堆叠技术。 在虚拟交换机支持方面,包括Brocade和华为在内的一些供应商只允许管理员使用虚拟机管理软件基础软件包中内置的功能。然而,思科还提供了 Nexus 1000v虚拟交换机软件。这个软件实际上可以替代VMware vSphere或微软Hyper-V的虚拟交换系统。惠普则尝试在其私有软件上叠加VMware的vSwitch软件。这样管理员在管理交换时就可以将它 当作一台虚拟HPE设备,而非VMware虚拟交换机。 思科Application Centric Infrastructure(ACI)和VMware NSX等新技术代表了下一代的数据中心功能和两个主流的软件定义网络(SDN)架构。通过使用NSX,我们就可以在三层数据中心交换机上堆叠二层网络,从 而让网络扁平化和降低复杂性。使用虚拟可扩展LAN(VXLAN)是这些架构的流行做法。有很多供应商推出了支持NSX平台和VXLAN实现的数据中心交 换机,其中包括Arista、戴尔、HPE和瞻博。 思科正在稳步推进自己的ACI产品计划。ACI与NSX的主要区别在于ACI并不会在物理的三层网络之上创建一个虚拟的二层网络。相反,ACI采用逐个应用处理的方式——同时相应地分配网络资源,而不会为虚拟交换机创建网络。 虚拟交换机集成和现在的SDN都已经成为现代数据中心的重要组成部分。如果您现在还没有应用SDN,那么思科的1000v可以为您提供虚拟交换 机方面的最灵活支持。NSX与ACI的对抗仍在继续,但是VMware可能占据了一定的先机,因为它能够支持多种供应商硬件的数据中心虚拟化。 端到端策略 最后要考虑的一个方面是端到端方法的价值:统一设计和简化故障修复是单供应商策略带来的独特好处。实际上来说,思科、HPE和华为都有覆盖整个 数据中心的硬件和软件产品线。其中,思科可能是最适合应用长期、端到端策略的选择。在这个方面,一定要注意软件定义网络架构的发展趋势。SDN的核心概念 是通过集中式和自动化各种基础架构策略来加快和简化数据中心应用程序的部署——从交换、路由到访问控制、存储分配等。只有所有的网络基础架构组件均使用相 同的底层协议,SDN实现才能成功。许多认为应该采用开源SDN平台作为基础,而有一些则认为混合私有/开源方案会更有优势。 无论采用哪一种方式,都必须了解数据中心所使用供应商的不同策略,以保证将来SDN成为标准时您能够正确评估现有的方案。大多数数据中心硬件/ 软件供应商(包括Arista、戴尔、Extreme、HPE和瞻博)都在开发基于OpenFlow协议的SDN策略。通过使用严格标准的同一种底层协 议,其他OpenFlow原生软件和设备都应该可以实现互操作。但是,我们都很清楚,互操作性有时候并不像说的那么轻松。 相反,思科则发布了OpFlex,这是思科设计的一个开放且基于标准的协议。虽然它在技术上并不是私有的,但是由于竞争对手已经大部分采用了OpenFlow,因此这种局面很可能在短期内无法改变。 目前而言,思科是唯一一家在基于自身SDN平台上使用不同标准的公司。有些人可能认为VMware的NSX实际上也是思科ACI的竞争对手,但 是现实中大多数人将它看作是OpenFlow落地前的临时替代品。思科推出了一个非常稳定的应用程序接口系统,第三方公司可以通过连接基础架构而增加解决 特定业务需求的功能。虽然这家公司也在缓慢推进SDN开发,但是似乎它将更多的时间用于解释SDN未来在思科网络中将是怎么一种形态。问题是,在选择下一 代网络基础架构时,您必须回答一个问题:是愿意跟踪世界网络供应商巨头并承受供应商锁定的风险,还是寻找其他供应商并承受互操作性问题和SDN未定型的风 险? 有许多不同的数据中心级交换机供应商和模型支持任意级别的数据中心。它们处理大多数任务的方式都很相似,但是在其他方面则差别很大,包括功能、 性能、聚合方式、端到端操作和将来的概念验证,只有搞清楚这些问题之后才能选定一个系统。在决策之前,一定要考虑当前和未来的需求,然后再决定与需求的关 系最密切的因素。 原文发布时间为: 2016年03月01日 本文作者:曾少宁翻译 本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网。

优秀的个人博客,低调大师

get“多主题适配”技能

本文由体验技术团队 TinyVue 项目成员岑灌铭创作,欢迎大家实操体验,本实操内容通过实现 TinyVue 中 Button 组件和 Alert 的类 element 主题适配,让开发者感受到 TinyVue 跨设计规范的亮点特性,同时对 TinyVue 组件库多主题的实现原理有个初步的了解。 知识背景 1. TinyVue 组件库简介 OpenTiny 是一套企业级前端开发解决方案,其中包含了组件库、低代码、中后台模板、CLI 命令行等丰富的效率提升工具。其中 TinyVue 是其中一款支持跨端、跨框架以及跨设计规范的组件库。 本次实操内容通过实现 TinyVue 中 Button 组件和 Alert 的类 element 主题适配,让开发者感受到 TinyVue 跨设计规范的亮点特性,同时对 TinyVue 组件库多主题的实现原理有个初步的了解。 代码托管 GitHub:https://github.com/opentiny/tiny-vue (欢迎大家 Star 和 提Issue、PR 进行反馈) TinyVue 官网:https://opentiny.design/tiny-vue/zh-CN/smb-theme/overview 2.环境基本要求 node.js v16+ npm v8+ 代码编辑器 VsCode 以及 Chrome/Edge 浏览器 代码实战 1.使用Vite创建一个Vue3项目 1.1 打开 VSCode 软件,使用 Ctrl+~快捷键打开终端。执行以下命令安装Vite npm install -g vite 1.2 使用 Vite 创建一个 Vue3 工程 npm create vite[@latest](https://my.oschina.net/u/4418429) tinyvue-multi-theme -- --template vue 命令行提示是否安装 create-vite@latest,输入y后回车,安装并创建 cd tinyvue-multi-theme npm install npm run dev 创建工程完毕后,依次输入以上命名 进入工程文件夹 安装依赖 执行命令启动项目 出现以下界面,则说明项目启动成功,Ctrl+鼠标左边单击 http://127.0.0.1:5173/ 从浏览器启动项目 浏览器打开会出现以上界面,说明一切正常,到此为止,Vue3项目已经完成创建。 2.安装 TinyVue,使用 button 以及 alert 组件 安装@opentiny/vue,在 vscode 终端下执行以下命名,安装 TinyVue 组件库 npm install @opentiny/vue@3.16.0 打开 OpenTiny 官网 https://opentiny.design/tiny-vue/zh-CN/overview 找到 Button 组件和 Alert 组件,可以参考官网 demo 的写法新增本次实验所需代码。 在 components 文件夹下,新建ButtonDemo.vue文件, 使用 Button 组件,新增6个类型的朴素按钮。 <template> <tiny-button plain> 朴素按钮 </tiny-button> <tiny-button type="primary" plain> 主要按钮 </tiny-button> <tiny-button type="success" plain> 成功按钮 </tiny-button> <tiny-button type="info" plain> 信息按钮 </tiny-button> <tiny-button type="warning" plain> 警告按钮 </tiny-button> <tiny-button type="danger" plain> 危险按钮 </tiny-button> </template> <script> import { Button } from "@opentiny/vue"; export default { components: { TinyButton: Button, }, }; </script> 在 components 文件夹下,新建AlertDemo.vue文件, 使用 Alert 组件,新增4个类型 alert。 <template> <div> <tiny-alert type="success" description="type 为 success"></tiny-alert> <tiny-alert type="simple" description="type 为默认值 info"></tiny-alert> <tiny-alert type="warning" description="type 为 warning"></tiny-alert> <tiny-alert type="error" description="type 为 error"></tiny-alert> </div> </template> <script> import { Alert } from "@opentiny/vue"; export default { components: { TinyAlert: Alert, }, }; </script> 删除无关文件HelloWorld.vue ,修改App.vue文件,引入ButtonDemo.vue和AlertDemo.vue组件。 import ButtonDemo from "./components/ButtonDemo.vue"; import AlertDemo from "./components/AlertDemo.vue"; 修改模板代码,删除 vite 初始 demo 代码,使用引入的 Button 和 Alert。 <template> <div class="theme-app"> <div class="container"> <button-demo></button-demo> </div> <div class="container"> <alert-demo></alert-demo> </div> </div> </template> 删除原本 vite 初始 demo 代码样式代码,新增本次实验所需的样式代码,使其看起来更美观一些。 <style scoped> .container { width: 650px; padding: 20px 24px; border-radius: 5px; border: 1px solid #ddd; margin-top: 24px; } </style> 完成以上步骤,就已经掌握了 TinyVue 组件的基本用法了,打开页面查看,如果显示以下页面,那么准备工作就完毕了~ 3.实现样式切换 下面来准备第三步,实现样式上的切换,开始实现之前,首先简单介绍一下 TinyVue 主题适配的原理。 原理: 在页面打开控制台,查看 button 的样式,可以看到样式属性值都是使用的 css var 变量。这些变量都以 ti-button 开头,这些可以称之为组件级变量。 通常情况下,相同类型(成功类型)的背景色、文本色等在不同组件中属性值相同,因此组件库定义了这部分常用到公共变量。而绝大多数组件级变量也都是使用的公共变量。 本次实验中 Button 和 Alert 的组件级变量的背景色正是使用的同一个公共变量ti-common-color-success-bg 主题适配的原理就是覆盖这些 css var 变量的值,去达到改变样式的效果。了解了原理后,就可以开始实现样式切换了。 实战: 在 components 文件夹下,新建ChangeTheme.vue文件, 编写切换样式逻辑。 这里使用 TinyVue 内置的 theme-tool 切换主题工具,只需要定义好相应主题变量的值即可,工具就会自动完成覆盖变量值的操作。 然后引入 Radio 组件,选中不同值时切换不同的主题,引入 theme-tool 工具,尝试修改上文提到的公共变量ti-common-color-success-bg,这里先设置为测试值 green 查看效果。 <script setup> import { Radio as TinyRadio, RadioGroup as TinyRadioGroup, } from "@opentiny/vue"; import TinyThemeTool from "@opentiny/vue-theme/theme-tool"; import { ref } from "vue"; const theme = ref("tiny-vue"); const themeTool = new TinyThemeTool(); const elementTheme = { id: "element-theme", name: "elementTheme", cnName: "饿了么主题", data: { "ti-common-color-success-bg": "green", }, }; const emit = defineEmits(["change-theme"]); const changeTheme = (theme) => { themeTool.changeTheme(theme === "element" ? elementTheme : null); emit("change-theme", theme); }; </script> <template> <tiny-radio-group v-model="theme" @change="changeTheme"> <tiny-radio label="tiny-vue"></tiny-radio> <tiny-radio label="element"></tiny-radio> </tiny-radio-group> </template> 在App.vue中引入并使用ChangeTheme组件 // script下新增 import ChangeTheme from "./components/ChangeTheme.vue"; // template下新增 <change-theme></change-theme> 接着打开页面查看效果,切换主题时,成功按钮和成功类型的 alert 背景颜色都变为 green 了~ 然后可以对比 element 组件样式差异:https://element-plus.org/zh-CN/component/button.html 将背景色、文字色等 css 属性修改为与 element 一致,当然也可以自己发挥,DIY 自己的主题。以下是一份参考配置: const elementTheme = { id: "element-theme", name: "elementTheme", cnName: "饿了么主题", data: { // 设置公共变量 "ti-common-color-primary-bg": "#409eff", "ti-common-color-primary-normal": "#409eff", "ti-common-color-success-bg": "#f0f9eb", "ti-common-color-success-normal": "#67c23a", "ti-common-color-info-bg": "#f4f4f5", "ti-common-color-info-normal": "#909399", "ti-common-color-warn-bg": "#fdf6ec", "ti-common-color-warn-normal": "#e6a23c", "ti-common-color-danger-bg": "#fef0f0", "ti-common-color-danger-normal": "#f56c6c", // 设置button相关样式属性 "ti-button-size-normal-height": "32px", "ti-button-border-radius": "4px", "ti-button-font-size": "14px", // 设置alert相关样式属性 "ti-alert-border-radius": "6px", "ti-alert-close-font-size": "14px", "ti-alert-description-font-size": "14px", "ti-alert-success-close-icon-color": "#a8abb2", "ti-alert-simple-close-icon-color": "#a8abb2", "ti-alert-error-close-icon-color": "#a8abb2", "ti-alert-warning-close-icon-color": "#a8abb2", "ti-alert-success-title-text-color": "#67c23a", "ti-alert-simple-title-text-color": "#909399", "ti-alert-warning-title-text-color": "#e6a23c", "ti-alert-error-title-text-color": "#f56c6c", "ti-alert-border-weight": "0px", }, }; 4.图标的适配 完成以上三步,此时 css 样式部分已经适配完毕。但是和 element 主题还是会有差别,仔细对比发现,element 主题是没有图标的。 而对于图标的隐藏,其实也可以通过 css var 变量的方式去实现,但是只能控制图标的显示和隐藏,无法实现不同主题下展示不同的图标,因此对于图标的适配,组件库采用配置的方式去实现。 以下是组件库代码截图,组件库对于图标,预留了配置项,组件库提供 ConfigProvider 组件来实现适配不同设计规范之间的图标和逻辑。 在App.vue文件下,引入 ConfigProvider,定义 designConfig,因为 element 是没有图标,因此配置为返回 null。定义切换方法 changeDesign,在切换样式的同时切换主题配置。 import { ConfigProvider } from "@opentiny/vue"; import { ref } from "vue"; const elementConfig = { name: "elementConfig", // 自定义规范名称 components: { Alert: { icons: { warning: () => null, success: () => null, error: () => null, }, }, }, }; const designConfig = ref({}); const changeDesign = (val) => { console.log(val === "element"); designConfig.value = val === "element" ? elementConfig : {}; }; 在模板中使用 ConfigProvider,传入主题配置。因为主题配置为非响应式更新,因此需要配置一下 key,切换配置后重新加载一下。 <template> <change-theme @change-theme="changeDesign"></change-theme> <config-provider :design="designConfig" :key="designConfig.name"> <div class="theme-app"> <div class="container"> <button-demo></button-demo> </div> <div class="container"> <alert-demo></alert-demo> </div> </div> </config-provider> </template> 配置完 designConfig 后,图标问题也解决了~ 5.交互的适配 完成以上4点,已经完成了 Button 组件和 Alert 组件的类 element 主题适配了,第5点属于拓展内容,试想一下,如果 element 主题在关闭 alert 前,需要弹出确认框确认,应该如何适配? 得益于 TinyVue 的 renderless 架构,可以很轻易地实现逻辑的替换,从而适配不同交互规范。对原理感兴趣的话,可以查看往期文章《手把手教你实现 miniTinyVue 版组件库》 这里直接贴实现方式,在 elementConfig 中新增替换 handleClose 的配置。 const elementConfig = { name: "elementConfig", // 自定义规范名称 components: { Alert: { icons: { warning: () => null, success: () => null, error: () => null, }, // 可以通过renderless重写某个方法,自定义交互逻辑 renderless: (props, hooks, { emit }, api) => { const state = api.state; return { handleClose() { const isClose = confirm("是否确认关闭?"); if (isClose) { state.show = false; } }, }; }, }, }, }; 打开页面,尝试关闭其中一个 alert,发现关闭前会弹出确认框。至此,样式、图标以及交互的适配都完成了~ 总结 至此,本次实操体验已全部完成。相信通过本次实操体验,你已经对 TinyVue 跨设计规范的原理以及相关工具有一个初步了解了~ 如果你感兴趣,完全通过theme-tool和config-provider打造一套属于自己的主题 ~ 关于OpenTiny OpenTiny 是一套企业级 Web 前端开发解决方案,提供跨端、跨框架、跨版本的 TinyVue 组件库,包含基于 Angular+TypeScript 的 TinyNG 组件库,拥有灵活扩展的低代码引擎 TinyEngine,具备主题配置系统TinyTheme / 中后台模板 TinyPro/ TinyCLI 命令行等丰富的效率提升工具,可帮助开发者高效开发 Web 应用。 欢迎加入 OpenTiny 开源社区。添加微信小助手:opentiny-official 一起参与交流前端技术~ OpenTiny 官网:https://opentiny.design/ OpenTiny 代码仓库:https://github.com/opentiny/ TinyVue 源码:https://github.com/opentiny/tiny-vue TinyEngine 源码: https://github.com/opentiny/tiny-engine 欢迎进入代码仓库 Star?*TinyEngine、TinyVue、TinyNG、TinyCLI~ 如果你也想要共建,可以进入代码仓库,找到 good first issue标签,一起参与开源贡献~

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册