首页 文章 精选 留言 我的

精选列表

搜索[一键部署],共10000篇文章
优秀的个人博客,低调大师

离线部署 CDH 5.12.1 及使用 CDH 部署 Hadoop 大数据平台集群服务

Cloudera Manager Cloudera Manager 分为两个部分:CDH和CM。 CDH是Cloudera Distribution Hadoop的简称,顾名思义,就是cloudera公司发布的Hadoop版本,封装了Apache Hadoop,提供Hadoop所有的服务,包括HDFS,YARN,MapReduce以及各种相关的components:HBase, Hive, ZooKeeper,Kafka等。 CM是cloudera manager的简称,是CDH的管理平台,主要包括CM server, CM agent。通过CM可以对CDH进行配置,监测,报警,log查看,动态添加删除各种服务等。 一、准备工作 环境 JDK:1.8 centos:7.3 操作系统:CentOS 6 JDK 版本:1.7.0_80 所需安装包及版本说明:由于我们的操作系统为CentOS7,需要下载以下文件: cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1 manifest.json Cloudera Manager 下载目录 http://archive.cloudera.com/cm5/cm/5/ CDH 下载目录 http://archive.cloudera.com/cdh5/parcels/5.12.1/ manifest.json 下载 http://archive.cloudera.com/cdh5/parcels/5.12.1/manifest.json CHD5 相关的 Parcel 包放到主节点的/opt/cloudera/parcel-repo/目录中 CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1 重命名为 CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha 这点必须注意,否则,系统会重新下载 CDH-5.12.1-1.cdh5.12.1.p0.3-el6.parcel 文件 本文采用离线安装方式,在线安装方式请参照官方文 主机名 ip地址 安装服务 node1 (Master) 192.168.252.121 jdk、cloudera-manager、MySql node2 (Agents) 192.168.252.122 jdk、cloudera-manager node3 (Agents) 192.168.252.123 jdk、cloudera-manager node4 (Agents) 192.168.252.124 jdk、cloudera-manager node5 (Agents) 192.168.252.125 jdk、cloudera-manager node6 (Agents) 192.168.252.126 jdk、cloudera-manager node7 (Agents) 192.168.252.127 jdk、cloudera-manager 二、系统环境搭建 1、网络配置(所有节点) 修改 hostname 命令格式 hostnamectl set-hostname <hostname> 依次修改所有节点 node[1-7] hostnamectl set-hostname node1 重启服务器 reboot 修改映射关系 1.在 node1 的 /etc/hosts 文件下添加如下内容 $ vi /etc/hosts 2.查看修改后的/etc/hosts 文件内容 [root@node7 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.252.121 node1 192.168.252.122 node2 192.168.252.123 node3 192.168.252.124 node4 192.168.252.125 node5 192.168.252.126 node6 192.168.252.127 node7 2、SSH 免密码登录 1.在集群node1的 /etc/ssh/sshd_config 文件去掉以下选项的注释 vi /etc/ssh/sshd_config RSAAuthentication yes #开启私钥验证 PubkeyAuthentication yes #开启公钥验证 2.将集群node1 修改后的 /etc/ssh/sshd_config 通过 scp 命令复制发送到集群的每一个节点 for a in {2..7} ; do scp /etc/ssh/sshd_config node$a:/etc/ssh/sshd_config ; done 3.生成公钥、私钥 1.在集群的每一个节点节点输入命令 ssh-keygen -t rsa -P '',生成 key,一律回车 ssh-keygen -t rsa -P '' 4.在集群的node1 节点输入命令 将集群每一个节点的公钥id_rsa.pub放入到自己的认证文件中authorized_keys; for a in {1..7}; do ssh root@node$a cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys; done 5.在集群的node1 节点输入命令 将自己的认证文件 authorized_keys 通过 scp 命令复制发送到每一个节点上去: /root/.ssh/authorized_keys` for a in {1..7}; do scp /root/.ssh/authorized_keys root@node$a:/root/.ssh/authorized_keys ; done 6.在集群的每一个节点节点输入命令 接重启ssh服务 sudo systemctl restart sshd.service 7.验证 ssh 无密登录 开一个其他窗口测试下能否免密登陆 例如:在node3 ssh root@node2 exit 退出 3、关闭防火墙 systemctl stop firewalld.service 4、关闭 SELINUX 查看 [root@node1 ~]# getenforce Enforcing [root@node1 ~]# /usr/sbin/sestatus -v SELinux status: 临时关闭 ## 设置SELinux 成为permissive模式 ## setenforce 1 设置SELinux 成为enforcing模式 setenforce 0 永久关闭 vi /etc/selinux/config 将 SELINUX=enforcing 改为 SELINUX=disabled 设置后需要重启才能生效 PS 我是修改node1 的 /etc/selinux/config 后,把配置文件复制到其他节点 for a in {2..7}; do scp /etc/selinux/config root@node$a:/etc/selinux/config ; done 重启所有节点 reboot 5、安装 JDK 下载Linux环境下的jdk1.8,请去(官网)中下载jdk的安装文件 我在百度云盘分下的链接:http://pan.baidu.com/s/1jIFZF9s 密码:u4n4 上传在 /opt 目录 解压 cd /opt tar zxvf jdk-8u144-linux-x64.tar.gz mv jdk1.8.0_144/ /lib/jvm 配置环境变量 vi /etc/profile #jdk export JAVA_HOME=/lib/jvm export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH 使环境变量生效 source /etc/profile 验证 [root@localhost ~]# java -version java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode) 6、设置 NTP 所有节点安装 NTP yum install ntp 设置同步 ntpdate -d 182.92.12.11 7、安装配置 MySql 主节点 安装 MySql MySQL依赖于libaio 库 yum search libaio yum install libaio 下载,解压,重命名 通常解压在 /usr/local/mysql 把mysql-5.7.19-linux-glibc2.12-x86_64 文件夹,重命名成mysql,这样就凑成/usr/local/mysql目录了 cd /opt/ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz tar -zxvf /opt/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ mv /usr/local/mysql-5.7.19-linux-glibc2.12-x86_64/ /usr/local/mysql 1. 新建用户组和用户 groupadd mysql useradd mysql -g mysql 2. 创建目录并授权 cd /usr/local/mysql/ mkdir data mysql-files chmod 750 mysql-files chown -R mysql . chgrp -R mysql . 3. 初始化MySQL bin/mysqld --initialize --user=mysql # MySQL 5.7.6 and up 4. 注意密码 mysql 临时密码 [注意]root@localhost生成临时密码:;b;s;)/rn6A3,也就是root@localhost:后的字符串 2017-09-24T08:34:08.643206Z 1 [Note] A temporary password is generated for root@localhost: D<qha)5gtr<! 5. 授予读写权限 chown -R root . chown -R mysql data mysql-files 6. 添加到MySQL 启动脚本到系统服务 cp support-files/mysql.server /etc/init.d/mysql.server 7. 给日志目录授予读写权限 mkdir /var/log/mariadb touch /var/log/mariadb/mariadb.log chown -R mysql:mysql /var/log/mariadb 8. 修改 /etc/my.cnf vi /etc/my.cnf 修改 [mysqld]组下的 socket 路径,注释掉/var/lib/mysql/mysql.sock,加一行为tmp/mysql.soc [mysqld] datadir=/var/lib/mysql #socket=/var/lib/mysql/mysql.sock socket=/tmp/mysql.sock 9.启动MySQL服务 service mysql.server start 或者 /usr/local/mysql/support-files/mysql.server start 10. 登录MySQL /usr/local/mysql/bin/mysql -uroot -p Enter password: 如果不知道密码密码在,安装MySQL步骤 4 ,有提到,怎么找初始化临时密码 11. 设置MySQL密码 登陆成功后,设置MySQL密码 mysql> ALTER USER 'root'@'localhost' identified by 'mima'; mysql> flush privileges; 12. 开启远程登录 mysql> grant all privileges on *.* to 'root'@'%' identified by 'mima' with grant option; mysql> flush privileges; mysql> exit; 8、下载依赖包 yum -y install chkconfig yum -y install bind-utils yum -y install psmisc yum -y install libxslt yum -y install zlib yum -y install sqlite yum -y install cyrus-sasl-plain yum -y install cyrus-sasl-gssapi yum -y install fuse yum -y install portmap yum -y install fuse-libs yum -y install redhat-lsb 三、cloudera manager Server & Agent 安装 1、安装 CM Server & Agent 在所有节点,创建/opt/cloudera-manager mkdir /opt/cloudera-manager 把下载好的cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz安装包上传至 node1 节点/opt/目录 在 node1 节点拷贝 cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz 到所有 Server、Agent 节点创建 /opt/cloudera-manager 目录: for a in {2..7}; do scp /opt/cloudera-manager-*.tar.gz root@node$a:/opt/ ; done 所有 Server、Agent 节点节点解压安装 Cloudera Manager Server & Agent cd /opt tar xvzf cloudera-manager*.tar.gz -C /opt/cloudera-manager 2、创建用户 cloudera-scm(所有节点) cloudera-scm 用户说明,摘自官网: Cloudera Manager Server and managed services are configured to use the user account cloudera-scm by default, creating a user with this name is the simplest approach. This created user, is used automatically after installation is complete. Cloudera管理器服务器和托管服务被配置为在默认情况下使用用户帐户Cloudera-scm,创建具有这个名称的用户是最简单的方法。创建用户,在安装完成后自动使用。 执行:在所有节点创建cloudera-scm用户 useradd --system --home=/opt/cloudera-manager/cm-5.12.1/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm 3、配置 CM Agent 修改 node1 节点 /opt/cloudera-manager/cm-5.12.1/etc/cloudera-scm-agent/config.ini中的server_host为主节点的主机名。 cd /opt/cloudera-manager/cm-5.12.1/etc/cloudera-scm-agent/ vi config.ini 在node1 操作将 node1 节点修改后的 (复制到所有节点) for a in {1..7}; do scp /opt/cloudera-manager/cm-5.12.1/etc/cloudera-scm-agent/config.ini root@node$a:/opt/cloudera-manager/cm-5.12.1/etc/cloudera-scm-agent/config.ini ; done 4、配置 CM Server 的数据库 在主节点 node1 初始化CM5的数据库: 下载 mysql 驱动包 cd /opt/cloudera-manager/cm-5.12.1/share/cmf/lib wget http://maven.aliyun.com/nexus/service/local/repositories/hongkong-nexus/content/Mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar 启动MySQL服务 service mysql.server start cd /opt/cloudera-manager/cm-5.12.1/share/cmf/schema/ ./scm_prepare_database.sh mysql cm -h node1 -uroot -pmima --scm-host node1 scm scm scm 看到如下信息,恭喜您,配置没毛病 [main] DbCommandExecutor INFO Successfully connected to database. All done, your SCM database is configured correctly! 格式: scm_prepare_database.sh mysql cm -h <hostName> -u<username> -p<password> --scm-host <hostName> scm scm scm 对应于:数据库类型 数据库 服务器 用户名 密码 –scm-host Cloudera_Manager_Server 所在节点…… 5、创建 Parcel 目录 Manager 节点创建目录/opt/cloudera/parcel-repo,执行: 将下载好的文件 CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha manifest.json 拷贝到该目录下。 mkdir -p /opt/cloudera/parcel-repo chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo cd /opt/cloudera/parcel-repo 重命名,CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1 否则,系统会重新下载 CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel mv CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1 CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha Agent 节点创建目录/opt/cloudera/parcels,执行: mkdir -p /opt/cloudera/parcels chown cloudera-scm:cloudera-scm /opt/cloudera/parcels 6、启动 CM Manager&Agent 服务 注意,mysql 服务启动,防火墙关闭 在 node1 (master) 执行: Server /opt/cloudera-manager/cm-5.12.1/etc/init.d/cloudera-scm-server start 在 node2-7 (Agents) 执行: Agents /opt/cloudera-manager/cm-5.12.1/etc/init.d/cloudera-scm-agent start 访问 http://Master:7180 若可以访问(用户名、密码:admin),则安装成功。 Manager 启动成功需要等待一段时间,过程中会在数据库中创建对应的表需要耗费一些时间。 四、CDH5 安装 CM Manager && Agent 成功启动后,登录前端页面进行 CDH 安装配置。 免费版本的 CM5 已经去除 50 个节点数量的限制。 各个 Agent 节点正常启动后,可以在当前管理的主机列表中看到对应的节点。 选择要安装的节点,点继续。 点击,继续,如果配置本地 Parcel 包无误,那么下图中的已下载,应该是瞬间就完成了,然后就是耐心等待分配过程就行了,大约 10 多分钟吧,取决于内网网速。 (若本地 Parcel 有问题,重新检查步骤三、5 是否配置正确) 点击,继续,如果配置本地Parcel包无误,那么下图中的已下载,应该是瞬间就完成了,然后就是耐心等待分配过程就行了,大约10多分钟吧,取决于内网网速。 遇到问题 问题一 接下来是服务器检查,可能会遇到以下问题: Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10。当前设置为 30。 使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf,以在重启后保存该设置。 您可以继续进行安装,但 Cloudera Manager 可能会报告您的主机由于交换而运行状况不良。以下主机将受到影响:node[2-7] echo 0 > /proc/sys/vm/swappiness 问题二 已启用透明大页面压缩,可能会导致重大性能问题。请运行 echo never > /sys/kernel/mm/transparent_hugepage/defrag和 echo never > /sys/kernel/mm/transparent_hugepage/enabled 以禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始化脚本中,以便在系统重启时予以设置。以下主机将受到影响: node[2-7] echo never > /sys/kernel/mm/transparent_hugepage/defrag echo never > /sys/kernel/mm/transparent_hugepage/enabled 五、脚本 MySql 建库&&删库 1、MySql 建库&&删库 amon create database amon DEFAULT CHARACTER SET utf8; grant all on amon.* TO 'amon'@'%' IDENTIFIED BY 'amon'; hive create database hive DEFAULT CHARACTER SET utf8; grant all on hive.* TO 'hive'@'%' IDENTIFIED BY 'hive'; oozie create database oozie DEFAULT CHARACTER SET utf8; grant all on oozie.* TO 'oozie'@'%' IDENTIFIED BY 'oozie'; Contact 作者:鹏磊 出处:http://www.ymq.io/2017/09/24/Cloudera-Manager Email:admin@souyunku.com 版权归作者所有,转载请注明出处 Wechat:关注公众号,搜云库,专注于开发技术的研究与知识分享

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

MinerU 上线网页解析功能,支持将 URL 一键变 Markdown

MinerU 是一款将 PDF 转化为机器可读格式的工具(如 markdown、json),可以很方便地抽取为任意格式。该项目近日宣布上线“网页解析”功能,只需输入链接或上传 HTML,即可实现网页到 Markdown 的完美转换。 解析成功后会看到左右分栏视图,左边是网页快照,右边是清晰的 Markdown 或 JSON。支持高质量缩放,对照查看,所见即所得。 技术报告链接:https://arxiv.org/pdf/2511.16397v1 模型链接:https://huggingface.co/opendatalab/MinerU-HTML 据介绍,这次更新的核心利器“MinerU HTML”网页解析系统具有以下核心亮点: 极致转化,秒变 Markdown。无需复杂操作,在统一输入框内粘贴网址,无论是图文并茂的深度长文,还是结构复杂的动态页面,MinerU 都能将其精准转化为逻辑严密、结构清晰的 Markdown 文档。 深度解析,继承技术优势。该功能充分继承了 MinerU 在公式、表格识别领域的领先优势。网页中嵌入的复杂科学公式、嵌套表格均能被精准还原,确保解析后的文档具备极高的可读性与专业性,完美适配学术研究与专业分析场景。 韧性解析,自带 “重试” 机制。如果动态加载出现问题,系统会自动切换重试。无论是复杂的交互页面还是难以提取信息的站点,在 MinerU 面前统统都要乖乖变回结构化的数据。 无惧动态渲染,深度兼容。针对现代网页常见的 React、Vue 等框架生成的动态内容,MinerU 展现了强大的解析能力。告别乱码与格式错位,让 “所见即所得” 成为现实。 纯净体验,去冗留精。系统会自动识别并过滤广告干扰、侧边栏杂讯及无关链接,剔除冗余信息,只为您提取最核心、最纯净的高价值内容。 目前,MinerU 网页端与桌面客户端提供了每人每日 100 次的免费配额。体验地址:https://mineru.net/OpenSourceTools/Extractor

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

快速入门 TinyVue 组件库一键换肤!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标签,一起参与开源贡献~

资源下载

更多资源
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应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册