背景

我司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 源码定制防坑指南的更多相关文章

  1. elementUI源码修改定制

    1.修改elementUI源码 首先从Git上克隆代码或者下载代码包 进入文件夹打开终端或Git Bash Here,运行npm install 安装依赖包.npm run dev 打开网页http: ...

  2. SpringBoot整合log4j2进行日志配置及防坑指南

    写在前面 最近项目经理要求将原先项目中的日志配置logBack,修改为log4j2,据说是log4j2性能更优于logback,具体快多少,网上有说快10多倍,看来还是很快的,于是新的一波挑战又开始了 ...

  3. 阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南

    我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...

  4. 漫谈可视化Prefuse(六)---改动源码定制边粗细

    可视化一路走来,体会很多:博客一路写来,收获颇丰:代码一路码来,思路越来越清晰.终究还是明白了一句古话:纸上得来终觉浅,绝知此事要躬行. 跌跌撞撞整合了个可视化小tool,零零碎碎结交了众多的志同道合 ...

  5. 用Scratch2.0源码定制一个自己的编辑器

    用Scratch2.0源码定制一个自己的编辑器,换成自己的软件名称和图标,添加中文字体,修复汉化错误等等1.准备:下载Scratch2.0源码.安装开发工具Adobe Flash Builder4.7 ...

  6. LineageOS源码定制手机系统

    LineageOS源码定制手机系统 导语: 现在市场的手机基本就两种:  苹果机和android机. 今天我们不谈苹果机, 对小编我来讲,那是个奢侈品, android是我的最爱.对于一般androi ...

  7. position: sticky 防坑指南

    position: sticky 防坑指南:https://www.jianshu.com/p/e217905e8b87 今天在写小程序项目的时候碰到一个需求是要把轮播图下面的标签栏滑动到顶部后固定, ...

  8. 记一次ElementUI源码修改过程

    修改目的 使用ElementUI el-tree过程发现选中节点,键盘移动上下键时(key down\key up)el-tree默认高亮移动的节点,业务上需要重写此事件. ​从官网发现该事件没有暴露 ...

  9. 05.ElementUI源码学习:项目发布配置(github pages&npm package)

    0x00.前言 书接上文.项目第一个组件已经封装好,说明文档也已编写好.下面需要将说明文档发布到外网上,以此来展示和推广项目,使用 Github Pages功能实现.同时将组件发布之 npm 上,方便 ...

随机推荐

  1. Ubuntu系统之Hadoop搭建

    作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3223 一.在Window中安装Oracle VM VirtualBox 二 ...

  2. 将爬取的实习僧网站数据传入HDFS

     一.引言: 作为一名大三的学生,找实习对于我们而言是迫在眉睫的.实习作为迈入工作的第一步,它的重要性不言而喻,一份好的实习很大程度上决定了我们以后的职业规划. 那么,一份好的实习应该考量哪些因素呢? ...

  3. win10如何删除自己设置过的头像

    把      %appdata%\Microsoft\Windows\AccountPictures  输入到地址栏  然后删除你想删除的照片即可

  4. Nginx系列 | [转]Nginx 上传文件:client_max_body_size 、client_body_buffer_size

    原文:http://php-note.com/article/detail/488 client_max_body_size client_max_body_size 默认 1M,表示 客户端请求服务 ...

  5. redis中get值显示为16进制字符串的解决方法

    Linux系统中,通过xshell登录redis,当根据某个key进行get取值时,取到的值为“\xc2\xed\xc0\xad\xcb\xb9\xbc\xd3”格式的十六进制字符串,原因是值中的中文 ...

  6. android -------- Base64 加密解密算法

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RFC2049,上面有MIME的详细规范. Ba ...

  7. tf.gather和tf.gather_nd、tf.cast、tf.greater

    https://blog.csdn.net/Cyiano/article/details/76087747

  8. 【WebSocket】WebSocket快速入门

    WebSocket介绍 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动 ...

  9. 【翻译】Flink Table Api & SQL —Streaming 概念 —— 时态表

    本文翻译自官网: Temporal Tables https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/strea ...

  10. 实现RTSP摄像机硬盘录像机NVR网站网页微信H5直播方案EasyNVR部署问题之:ERR_CONTENT_LENGTH_MISMATCH

    背景分析 接触到EasyNVR产品的开发者都知道,EasyNVR是一套功能齐全.简洁易用的流媒体解决方案,可作为能力曾前端接入摄像头,后端接入业务系统使用,也可以作为应用层,直接修改为属于企业用户自己 ...