ElementUI 源码定制防坑指南
背景
我司OA系统公文管理模块Office在线编辑使用的是金格IWebOffice中间件【PPAPI插件,通过<object>标签加载】,IWebOffice在chrome中设置div盒子的css样式display:none会造成控件的奔溃,出现空白等异常情况。用过ElementUI的都知道Tabs标签页,标签之间切换用的正是display属性,笔者要改的是使用width:0px;height:0px;opacity:0;visibility:hidden;做标签的切换。

Fork element 源码
GitHub仓库地址:https://github.com/ElemeFE/element
首先Fork一份源码到自己的github帐号。

接着使用git命令行工具将源码clone到本地。
git clone https://github.com/itwmike/element.git
笔者项目中使用的是 element 2.5.4 版本,所以从 2.5.4 这个tag签出一个自己的分支进行开发。
git checkout -b v2.5.4 lk-element-ui #从 v2.5.4 tag 创建分支
本地调试 element
npm install #安装相应的依赖包
npm run dev #运行调试,如果有报错看看是否为 ESlint 语法检测提示的错误。

修改 tabs 源码
为了不污染源码,笔者复制 tab-pane.vue 新建了一个自己的组件并命名为 LoElTabPane,修改其内的源码如下:


接着修改 tabs.vue 中代码使其支持 新加的组件:

组件修改好后需要导出并进行全局注册。
全局注册 LoTabPane
在 packages 文件夹下增加 lo-tab-pane 文件夹并添加 index.js 文件,该文件主要用于导出 LoTabPane 。
import LoTabPane from '../tabs/src/lo-tab-pane.vue'; /* istanbul ignore next */
LoTabPane.install = function(Vue) {
Vue.component(LoTabPane.name, LoTabPane);
}; export default LoTabPane;
接着修改根目录下的 components.json 文件,在文件中加入 lo-tab-pane 。该文件的主要作用是在构建时生成 src/index.js,在 index.js 中进行了组件的全局注册和导出。
"lo-tab-pane": "./packages/lo-tab-pane/index.js",
添加组件 TypeScript 支持
在 types 目录下新建 lo-tab-pane.d.ts 文件,除了类名外其他内容和 tab-pane.d.ts 相同。
import { ElementUIComponent } from './component'
/** Tab Pane Component */
export declare class LoElTabPane extends ElementUIComponent {
/** Title of the tab */
label: string
/** Whether Tab is disabled */
disabled: boolean
/** Identifier corresponding to the activeName of Tabs, representing the alias of the tab-pane */
name: string
/** Whether Tab is closable */
closable: boolean
/** Whether Tab is lazily rendered */
lazy: boolean
}
同时在 types/element-ui.d.ts 文件中导入新增的类。
import { LoElTabPane } from './lo-tab-pane' // 导入
export class LoTabPane extends LoElTabPane {} // 导出
添加组件到 examples 菜单
组件开发完成后添加到 examples 中进行测试。

拷贝 examples\docs\zh-CN\tabs.md 到同级目录并命名为 lo-tabs.md,将其内的 el-tab-pane 组件换成 lo-el-tab-pane。

在 examples\nav.config.json 中增加 lo-tabs 菜单。

组件发布
网上博友说修改包名和版本号可以将自己DIY出的 element 发布到 npm,使用 npm install 安装使用。其实这种做法是错误的误导,笔者亲验纯属瞎扯蛋。
使用 npm run dist 打包后的文件在 lib 文件夹下,其中 element-ui.common.js 为包入口,打开这个文件可以看到存在很多类似
module.exports = require("element-ui/lib/mixins/emitter");
这样的代码,使用的都是 element-ui 开头的相对路径。如果你的包名换成其他,我敢保证在项目中打包的时候会报 xxx not find 错误。
正确的做法应该是将包发布到 git仓库,如github这样的平台,使用 npm install git仓库 这样的方式安装。
npm install git+https://github.com/itwmike/element.git
本文转载自:https://www.limitcode.com/detail/5db589bf10dcbf0b1852b349.html
ElementUI 源码定制防坑指南的更多相关文章
- elementUI源码修改定制
1.修改elementUI源码 首先从Git上克隆代码或者下载代码包 进入文件夹打开终端或Git Bash Here,运行npm install 安装依赖包.npm run dev 打开网页http: ...
- SpringBoot整合log4j2进行日志配置及防坑指南
写在前面 最近项目经理要求将原先项目中的日志配置logBack,修改为log4j2,据说是log4j2性能更优于logback,具体快多少,网上有说快10多倍,看来还是很快的,于是新的一波挑战又开始了 ...
- 阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南
我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...
- 漫谈可视化Prefuse(六)---改动源码定制边粗细
可视化一路走来,体会很多:博客一路写来,收获颇丰:代码一路码来,思路越来越清晰.终究还是明白了一句古话:纸上得来终觉浅,绝知此事要躬行. 跌跌撞撞整合了个可视化小tool,零零碎碎结交了众多的志同道合 ...
- 用Scratch2.0源码定制一个自己的编辑器
用Scratch2.0源码定制一个自己的编辑器,换成自己的软件名称和图标,添加中文字体,修复汉化错误等等1.准备:下载Scratch2.0源码.安装开发工具Adobe Flash Builder4.7 ...
- LineageOS源码定制手机系统
LineageOS源码定制手机系统 导语: 现在市场的手机基本就两种: 苹果机和android机. 今天我们不谈苹果机, 对小编我来讲,那是个奢侈品, android是我的最爱.对于一般androi ...
- position: sticky 防坑指南
position: sticky 防坑指南:https://www.jianshu.com/p/e217905e8b87 今天在写小程序项目的时候碰到一个需求是要把轮播图下面的标签栏滑动到顶部后固定, ...
- 记一次ElementUI源码修改过程
修改目的 使用ElementUI el-tree过程发现选中节点,键盘移动上下键时(key down\key up)el-tree默认高亮移动的节点,业务上需要重写此事件. 从官网发现该事件没有暴露 ...
- 05.ElementUI源码学习:项目发布配置(github pages&npm package)
0x00.前言 书接上文.项目第一个组件已经封装好,说明文档也已编写好.下面需要将说明文档发布到外网上,以此来展示和推广项目,使用 Github Pages功能实现.同时将组件发布之 npm 上,方便 ...
随机推荐
- 升级pip后,出现ImportError:cannot import name main
升级pip后,出现ImportError错误,如下图: 解决方法: sudo gedit /usr/bin/pip 进去后修改为 from pip import __main__ if __name_ ...
- 第06组 Beta冲刺(1/5)
队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 准备beta冲刺的内容和分工 修改了后端的一些bug GitHub签入记录 接下来的计划 ...
- how does SELECT TOP works when no order by is specified?
how does SELECT TOP works when no order by is specified? There is no guarantee which two rows you ge ...
- 运行OpenGL红宝书第9版源码时Visual Studio提示“无法启动程序...ALL_BUILD。拒绝访问“的问题的解决办法
问题描述: OpenGL红宝书第9版源码采用CMake编译后,用相应的Visual Studio(如VS2012)打开“vermilion9.sln”解决方案,并运行时Visual Studio提示“ ...
- android -------- DES加密解密算法
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信 ...
- t4模版快速入门
语法 主要包括指令.文本块.控制块. 1.指令 指令主要包括template, output, assembly, import, include等类型,用以告诉T4引擎如何编译和运行一个模板.这些指 ...
- vue---发送数据请求的一些列的问题
使用vue做数据请求,首先考虑的是封装请求方法request.js import axios from 'axios' import Qs from 'qs' // 创建一个axios实例 const ...
- electron---项目打包
创建一个应用目录:app,里面需要有必要的三个文件: index.html <!DOCTYPE html> <html> <head> <meta chars ...
- notepadd++中,如何根据某个字符将一行内容切割成多行?
背景描述: 今天在做个事情,遇到下面字符,就想将每个词,如cluster,zookeeper都单独的一行 [cluster, activemq, controller, brokers, zookee ...
- 几种常见的java网页静态化技术对比
名称 优点 缺点 使用场景 jsp 1.功能强大,可以写java代码 2.支持jsp标签(jsp tag) 3.支持表达式语言(el) 4.官方标准,用户群广,丰富的第三方jsp标签库 5.性能良好. ...