最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何構(gòu)建一個Vue插件并生成npm包

 更新時間:2020年10月26日 15:04:30   作者:學與思  
這篇文章主要介紹了如何構(gòu)建一個Vue插件并生成npm包,幫助大家更好的理解和使用vue,方便以后的開發(fā),感興趣的朋友可以了解下

    vue的插件一般用來添加全局性的功能,具體可分為:

  1. 添加全局方法或者屬性;
  2. 添加全局資源(指令、過濾器等);
  3. 通過全局 mixin 方法添加一些組件選項;
  4. 在 Vue.prototype 上 添加 Vue 實例方法;
  5. 創(chuàng)建一個庫,提供自己的 API,同時提供上面提到的一個或多個功能;    

一般來說我們在項目中傾向于第五種方式,可以通過創(chuàng)建一個js文件包含我們需要添加的多種全局性功能,指令、過濾器、實例方法之類的。這樣的一個插件的構(gòu)建也不難,主要就是使用vue提供的install 方法,傳入Vue構(gòu)造器以及你所能用到的參數(shù)對象;添加對應(yīng)的功能,export出去,在需要的地方引入并Vue.use()方法注冊即可;具體使用參考vue官網(wǎng)插件部分——開發(fā)插件。

    這一次我的項目中需要添加‘反爬'功能,具體實現(xiàn)就是后端在檢測到用戶觸發(fā)‘反爬'規(guī)則后返回指定錯誤碼以及對應(yīng)的驗證頁面,前端在全局請求中監(jiān)測該錯誤碼,在檢測到錯誤碼后通過插件加載驗證頁面讓用戶去驗證,并將驗證結(jié)果反饋給后端,在后端收到驗證結(jié)果后移除驗證頁面。

     需求確定后,我們就知道這個插件需要做的事情就是創(chuàng)建一個vue組件實例=>加載后端返回的頁面=>解析并執(zhí)行其中的js文件=>注冊驗證成功的全局回調(diào)函數(shù)。具體操作如下:

const antiReptilian = {
 install(Vue, options) {
  Vue.$antirept = checkText => {
   if (!checkText) return;
   let wrapperTemp = Vue.extend({
    // 1、創(chuàng)建構(gòu)造器,定義模板
    template:
     '<div id="antiReptWrapper" style="z-index:9999 !important;"></div>'
   });
   let antiObj = new wrapperTemp().$mount().$el; // 2、創(chuàng)建實例
   antiObj.innerHTML = checkText;
   initScripts(antiObj);//3、解析并順序執(zhí)行js
   let App = document.getElementById('app');
   let wrapper = document.getElementById('antiReptWrapper');
   if (wrapper) {
    return;
   }
   App.appendChild(antiObj); // 4、把創(chuàng)建的實例添加到App中
   window.checkSucceed = res => {
    // 5、驗證通過后移除實例
    App.removeChild(antiObj);
    window.location.reload();
   };
  };
 }
};

    需要注意的是通過設(shè)置innerHTML 的方式加載驗證頁面會導(dǎo)致內(nèi)部的js文件不執(zhí)行;因此我們還必須將驗證頁面的的js文件提取出來再重新插入,并且還要保證內(nèi)部多個js文件的執(zhí)行順序,具體代碼如下:

//重新引入js文件
const initScripts = function(cont) {
 let oldScripts = cont.getElementsByTagName('script');
 let newScripts = [];
 for (let i = 0; i < oldScripts.length; i++) {//提取內(nèi)部js文件
  let newScript = document.createElement('script');
  newScript.type = 'text/javascript';
  newScript.innerHTML = oldScripts[i].innerHTML;
  if (oldScripts[i].src) {
   newScript.src = oldScripts[i].src;
  }
  newScripts.push(newScript);
 }
 while (oldScripts.length !== 0) {
  cont.removeChild(oldScripts[0]);//移除之前的js文件
 }
 for (let i = 0; i < newScripts.length; i++) {
  if (i == 0) {
   cont.appendChild(newScripts[i]);
  } else {//保證每個js文件按照之前的順序執(zhí)行
   newScripts[i - 1].onload = newScripts[
    i - 1
   ].onreadystatechange = function(event) {
    cont.appendChild(newScripts[i]);
   };
  }
 }
};

    到此為止這個簡單的插件功能就完成了,在需要的地方引入、注冊并調(diào)用Vue.$antirept()方法傳入要加載的頁面即可;

    將寫好的插件生成npm包的方法也簡單,分為以下幾步:

1、前往npm官網(wǎng)注冊一個npm賬號=>【npm官網(wǎng)】;

2、將寫好的插件生成一個簡單的npm包:

  • 創(chuàng)建一個空文件夾,名稱即為你的npm包的名稱,注意名稱不要與現(xiàn)有的npm包重復(fù);
  • 切到該文件夾下,輸入‘npm init'命令生成一個package.json文件,內(nèi)部信息自定義;
  • 將寫好的插件js文件拷到該文件夾下,重命名為index.js;
  • 在根目錄下創(chuàng)建README.md文件,添加關(guān)于包的介紹信息(非必需);

3、發(fā)布創(chuàng)建好的包:

1. 若第一次發(fā)布包,執(zhí)行‘ npm adduser'命令,輸入前面注冊好的npm賬號,密碼和郵箱;
2. 若不是第一次發(fā)布包,執(zhí)行‘ npm login'命令進行登錄,同樣輸入npm賬號,密碼和郵箱;
3.  登錄成功以后,在剛才的文件夾下,執(zhí)行‘npm publish'命令,即可發(fā)布該npm包;
4.  若要更新之前的包,只需要更改版本號,再執(zhí)行‘npm publish'命令即可;

    至此一個簡單的vue插件就生成了一個npm包了,以后使用就不需要加載js文件,可以直接通過npm的方式引入了,其它的小伙伴也可以一起愉快的玩耍了==>全劇終。

以上就是如何構(gòu)建一個Vue插件并生成npm包的詳細內(nèi)容,更多關(guān)于vue生成npm包的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • element-ui中table表格的折疊和隱藏方式

    element-ui中table表格的折疊和隱藏方式

    這篇文章主要介紹了element-ui中table表格的折疊和隱藏方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue 使用formData方式向后臺發(fā)送數(shù)據(jù)的實現(xiàn)

    Vue 使用formData方式向后臺發(fā)送數(shù)據(jù)的實現(xiàn)

    這篇文章主要介紹了Vue 使用formData方式向后臺發(fā)送數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • vue2利用html2canvas+jspdf動態(tài)生成多頁PDF方式

    vue2利用html2canvas+jspdf動態(tài)生成多頁PDF方式

    利用vue2結(jié)合html2canvas和jspdf,可以實現(xiàn)前端頁面內(nèi)容導(dǎo)出為PDF的功能,首先需要安裝相關(guān)依賴,使用html2canvas將指定div內(nèi)容捕捉為圖像,再通過jspdf將圖像轉(zhuǎn)換為PDF
    2024-09-09
  • 基于Electron24+Vite4+Vue3搭建桌面端應(yīng)用實戰(zhàn)教程

    基于Electron24+Vite4+Vue3搭建桌面端應(yīng)用實戰(zhàn)教程

    這篇文章主要介紹了基于Electron24+Vite4+Vue3搭建桌面端應(yīng)用,這次給大家主要分享的是基于electron最新版本整合vite4.x構(gòu)建vue3桌面端應(yīng)用程序,需要的朋友可以參考下
    2023-05-05
  • vue中前端代理跨域問題實例總結(jié)

    vue中前端代理跨域問題實例總結(jié)

    前后端分離進行項目開發(fā),跨域問題不可避免,下面這篇文章主要給大家介紹了關(guān)于vue中前端代理跨域問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • vue resource發(fā)送請求的幾種方式

    vue resource發(fā)送請求的幾種方式

    這篇文章主要介紹了vue resource發(fā)送請求的幾種方式,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Vant2移動端Vue組件庫問題記錄

    Vant2移動端Vue組件庫問題記錄

    Vant是一套輕量、可靠的移動端組件庫,通過Vant可以快速搭建出風格統(tǒng)一的頁面,提升開發(fā)效率,下面這篇文章主要給大家介紹了關(guān)于Vant2移動端Vue組件庫問題的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Vuex總體案例詳解

    Vuex總體案例詳解

    這篇文章主要介紹了Vuex總體案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • vue實現(xiàn)可移動的懸浮按鈕

    vue實現(xiàn)可移動的懸浮按鈕

    這篇文章主要為大家詳細介紹了vue實現(xiàn)可移動的懸浮按鈕,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • vue通過點擊事件讀取音頻文件的方法

    vue通過點擊事件讀取音頻文件的方法

    最近做項目遇到這樣的一個需求,通過select元素來選擇音頻文件的名稱,點擊按鈕可以進行試聽。接下來通過本文給大家介紹vue項目中通過點擊事件讀取音頻文件的方法,需要的朋友可以參考下
    2018-05-05

最新評論

鄯善县| 闸北区| 吉安县| 平利县| 达拉特旗| 巨野县| 木里| 福安市| 花莲市| 浙江省| 郴州市| 蒙自县| 武强县| 临泉县| 西华县| 涪陵区| 乌什县| 泾源县| 定兴县| 新巴尔虎左旗| 涿鹿县| 固安县| 祥云县| 华阴市| 镇巴县| 庆云县| 沅江市| 郧西县| 许昌市| 平和县| 昆山市| 汉源县| 河东区| 独山县| 枝江市| 洪泽县| 永福县| 永登县| 徐汇区| 项城市| 柳河县|