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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM