亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

如何構建一個Vue插件并生成npm包

瀏覽:5日期:2022-11-11 10:08:21

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

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

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

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

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

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

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

//重新引入js文件const initScripts = function(cont) { let oldScripts = cont.getElementsByTagName(’script’); let newScripts = []; for (let i = 0; i < oldScripts.length; 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文件按照之前的順序執行 newScripts[i - 1].onload = newScripts[ i - 1 ].onreadystatechange = function(event) { cont.appendChild(newScripts[i]); }; } }};

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

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

1、前往npm官網注冊一個npm賬號=>【npm官網】;

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

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

3、發布創建好的包:

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

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

以上就是如何構建一個Vue插件并生成npm包的詳細內容,更多關于vue生成npm包的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
主站蜘蛛池模板: 天天好比网 | 日韩欧美亚洲国产高清在线 | 黄色视频一级毛片 | 亚洲国产精品视频 | 男人免费看片 | 成人免费观看在线网址 | 欧美日韩在线免费 | 丁香婷婷六月 | 国产片欧美片亚洲片久久综合 | 黄色网址网站 | 深夜欧美福利视频在线观看 | 国产青青草视频 | 久久久久久久久免费视频 | 黄色网址视频免费 | 一区二区三区四区国产 | 亚洲综合第一欧美日韩中文 | 成人伊人青草久久综合网破解版 | 精品一区二区三区自拍图片区 | 风间由美理伦片在线观看 | 国产精品人体私拍99pans | 欧美成 人激情视频 | 欧美中文字幕第一页 | 国产精品福利视频一区二区三区 | 国产午夜精品片一区二区三区 | 正在播放国产大学生情侣 | 国产在线精品福利一区二区三区 | 免费人成网站线观看合集 | 中文字幕在线永久视频 | 国产成人久久综合热 | 一级a毛片免费观看 | 我要看黄色一级毛片 | 国产精品探花千人斩久久 | a级粗大硬长爽猛视频免费 a级精品国产片在线观看 | 免费在线看黄网址 | 日韩亚洲欧美性感视频影片免费看 | 国产成人一区二区三区影院免费 | 欧美国产成人精品一区二区三区 | 国产欧美成人 | 日本免费在线一区 | 中国淫片 | 国产精品免费综合一区视频 |