精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

構建Vue CLI插件的基本流程

開發 前端
當然,本文中介紹的插件是非常基本的,希望本文可以幫助你,未來的某天需要進行開發cli-plugins的時候,可以再回頭看看此文。

[[395224]]

前言

如果你正在使用Vue框架,你可能已經知道什么是Vue CLI了。它是一個用于快速開發Vue.js的完整系統,提供項目腳手架。

CLI的一個重要部分是cli-plugins。它們可以修改內部的webpack配置并向vue-cli服務注入命令。

一個很好的例子是 @vuecli-plugin-typescript :當你調用它時,它會給你的項目添加一個tsconfig.json,并改變App.vue的類型,所以你不需要手動去做。

插件是非常有用的,但如果你想有一個用于某些特定庫的插件而它不存在呢?嗯,當我們是這樣子的情況時......我們決定自己建立它。

在這篇文章中,我們將建立一個vue-cli-plugin-tiantian。它允許我們將vue-rx庫添加到我們的項目中,并在我們的Vue應用程序中獲得RxJS支持。

讓我們來看看整個的大致流程吧。

Vue-CLI插件結構

首先,什么是CLI插件?它只是一個具有一定結構的npm包。關于文檔,它必須有一個服務插件作為其主要出口,并可以有額外的功能,例如生成器和提示文件。

目前,絕對不清楚什么是服務插件或生成器,但不用擔心--以后會有解釋的!

當然,像任何npm軟件包一樣,CLI插件在其根文件夾中必須具有package.json,并且最好具有一些說明的README.md。

因此,讓我們從以下結構開始。

  1. ├── README.md 
  2. ├── index.js      # service plugin 
  3. └── package.json 

現在讓我們來看看可選部分。生成器可以在package.json中注入額外的依賴關系或字段,并向項目中添加文件。我們需要它嗎?

當然,我們想把rxjs和vue-rx作為我們的依賴項。更確切地說,我們想創建一些示例組件,如果用戶想在安裝插件時添加它。

因此,我們需要添加 generator.js 或 generatorindex.js。我更喜歡第二種方式?,F在的結構看起來是這樣的:

  1. ├── README.md 
  2. ├── index.js      # service plugin 
  3. ├── generator 
  4. │   └── index.js  # generator 
  5. └── package.json 

還有一件事要添加,就是一個提示文件。我希望我的插件能夠詢問用戶是否想擁有一個示例組件。我們將需要在根目錄下有一個prompts.js文件來實現這一行為。所以,現在的結構是這樣的:

服務插件(Service plugin)

一個服務插件應該輸出一個函數,它接收兩個參數:一個PluginAPI實例和一個包含項目本地選項的對象。

它可以針對不同的環境擴展修改內部的webpack配置,并向vue-cli-service注入額外的命令。

讓我們想一想:我們是否想以某種方式改變webpack配置或創建一個額外的npm任務?

答案是否定的,我們只想在必要時添加一些依賴項和示例組件。因此,我們需要在index.js中改變的是:

  1. module.exports = (api, opts) => {} 

如果您的插件需要更改Webpack配置,請閱讀Vue官方CLI文檔中的本節。

https://cli.vuejs.org/dev-guide/plugin-dev.html#service-plugin

通過生成器添加依賴項

如上所述,CLI插件生成器可以幫助我們添加依賴性和改變項目文件。

因此,第一步我們需要做的是為我們的插件添加兩個依賴項:Rxjs和vue-rx:

  1. module.exports = (api, options, rootOptions) => { 
  2.   api.extendPackage({ 
  3.     dependencies: { 
  4.       'rxjs''^6.3.3'
  5.       'vue-rx''^6.0.1'
  6.     }, 
  7.   }); 

一個生成器應該輸出一個函數,該函數接收三個參數:一個GeneratorAPI實例,生成器選項和--如果用戶使用某些預設創建一個項目--整個預設將作為第三個參數傳遞。

api.extendPackage方法擴展了項目的package.json。嵌套的字段會被深度合并,除非你把**{ merge: false }**作為一個參數。在我們的例子中,我們要添加兩個依賴項到依賴項部分。

現在我們需要改變一個main.js文件。為了讓RxJS在Vue組件中工作,我們需要導入一個VueRx并調用Vue.use(VueRx)。

首先,讓我們創建一個我們想要添加到主文件的字符串:

  1. let rxLines = `\nimport VueRx from 'vue-rx';\n\nVue.use(VueRx);`; 

現在我們要使用api.onCreateComplete 鉤子函數。當文件被寫入磁盤時,它被調用:

  1. api.onCreateComplete(() => { 
  2.     // inject to main.js 
  3.     const fs = require('fs'); 
  4.     const ext = api.hasPlugin('typescript') ? 'ts' : 'js'
  5.     const mainPath = api.resolve(`./src/main.${ext}`); 
  6. }; 

這里我們要找的是主文件:如果是TypeScript項目,會是main.ts,否則就是main.js文件。fs這里是文件系統。

現在讓我們更改文件內容:

  1. api.onCreateComplete(() => { 
  2.    // inject to main.js 
  3.    const fs = require('fs'); 
  4.    const ext = api.hasPlugin('typescript') ? 'ts' : 'js'
  5.    const mainPath = api.resolve(`./src/main.${ext}`); 
  6.  
  7.    // get content 
  8.    let contentMain = fs.readFileSync(mainPath, { encoding: 'utf-8' }); 
  9.    const lines = contentMain.split(/\r?\n/g).reverse(); 
  10.  
  11.    // inject import 
  12.    const lastImportIndex = lines.findIndex(line => line.match(/^import/)); 
  13.    lines[lastImportIndex] += rxLines; 
  14.  
  15.    // modify app 
  16.    contentMain = lines.reverse().join('\n'); 
  17.    fs.writeFileSync(mainPath, contentMain, { encoding: 'utf-8' }); 
  18.  }); 

我們正在讀取主文件的內容,將其分成幾行,并恢復其順序。然后,我們搜索帶有導入(import)語句的第一行,并在那里添加我們的rxLines。在這之后,我們對行數組進行逆轉,并保存文件。

在本地測試CLI插件

讓我們在package.json中添加有關我們的插件的一些信息,然后嘗試將其安裝在本地進行測試。

最重要的信息通常是插件名稱和版本(將插件發布到npm時將需要這些字段),隨時可以添加更多信息!package.json字段的完整列表可以在此處找到。以下是我的文件:

  1.   "name""vue-cli-plugin-tiantian"
  2.   "version""xxx.1.5"
  3.   "description""Vue-cli 3 plugin for adding RxJS support XXXX"
  4.   "main""index.js"
  5.   "keywords": [ 
  6.     "vue"
  7.     "vue-cli"
  8.     "rxjs"
  9.     "vue-rx" 
  10.   ], 
  11.   "author""TianTian"
  12.   "license""MIT"

現在是時候檢查我們的插件如何工作了!為此,我們創建一個由vue-cli支持的簡單項目:

  1. vue create test-app 

轉到項目文件夾,安裝我們新創建的插件。

  1. cd test-app 
  2. npm install --save-dev file:/full/path/to/your/plugin //填寫路徑 

安裝插件后,您需要調用它:

  1. vue invoke vue-cli-plugin-rx 

現在,如果你試圖檢查main.js文件,你可以看到它已經改變了。

  1. import Vue from 'vue' 
  2. import App from './App.vue' 
  3. import VueRx from 'vue-rx'
  4.  
  5. Vue.use(VueRx); 

此外,你可以在你的測試應用package.json的devDependencies部分找到你的插件。

用生成器創建一個新組件

當你的插件可以工作的時候,也是時候對它的功能進行一些擴展,使它能夠創建一個示例組件?,F在是時候擴展其功能并使其能夠創建示例組件了。Generator API為此使用了render方法。

首先,讓我們來創建這個示例組件。它應該是一個位于項目src/components文件夾下的.vue文件。在生成器文件夾內創建一個模板文件夾,然后在其中模擬整個結構:

項目目錄

假設一下,你的示例組件應該就是一個Vue的單文件組件 , 篇幅有限,所以這篇文章中深入解釋RxJS。

所以創建了一個簡單的由RxJS驅動的有兩個按鈕的點擊計數器,如圖所示:

button

現在,我們需要指示插件在調用時呈現此組件。為此,我們將以下代碼添加到generator / index.js中:

  1. api.render('./template', { 
  2.   ...options, 
  3. }); 

這將呈現整個模板文件夾。現在,當插件被調用時,一個新的RxExample.vue將被添加到src / components文件夾中。

通過提示處理用戶選擇

如果用戶不希望有一個示例組件怎么辦?讓用戶在插件安裝過程中決定這一點不是很明智嗎?這就是提示存在的原因!

之前我們已經在插件根目錄下創建了prompts.js文件。這個文件應該包含一個question數組:每個question都是一個對象,有一定的字段,如名稱、信息、選擇、類型等。

名稱很重要:我們稍后將在生成器中使用它來創建一個渲染示例組件的條件。

提示語可以有不同的類型,但在CLI中最廣泛使用的是復選框和確認。我們將使用后者來創建一個有 "是 "的答案的問題。

因此,讓我們將提示代碼添加到prompts.js中!

  1. module.exports = [ 
  2.   { 
  3.     name: `addExample`, 
  4.     type: 'confirm'
  5.     message: 'Add example component to components folder?'
  6.     defaultfalse
  7.   }, 
  8. ]; 

我們有一個addExample提示,詢問用戶是否要將組件添加到components文件夾。默認答案為“no”。

讓我們回到生成器文件中,做一些修正。將api.render的調用改為:

  1. if (options.addExample) { 
  2.     api.render('./template', { 
  3.       ...options, 
  4.     }); 

我們正在檢查addExample是否有一個肯定的答案,如果有,該組件將被渲染。

不要忘了在每次改變后重新安裝和測試你的插件!

發布

值得我們去注意點是:

發布插件之前,請檢查其名稱是否與模式vue-cli-plugin- < YOUR-PLUGIN-NAME > 相匹配。這使您的插件可以通過@ vue / cli-service發現,并可以通過vue add安裝。

接下來您需要注冊一個npmjs.com,然后按照發包的機制,完成接下來的操作。

當然了要發布插件,請轉到插件根文件夾,然后在終端中鍵入npm publish。

此時,您應該可以使用vue add命令安裝插件。嘗試一下!

結束語

當然,本文中介紹的插件是非?;镜?,希望本文可以幫助你,未來的某天需要進行開發cli-plugins的時候,可以再回頭看看此文。

 

責任編輯:武曉燕 來源: TianTianUp
相關推薦

2020-12-15 08:16:44

Vite工具系統

2022-02-08 15:55:00

Vue組件庫Vue Demi

2021-06-22 06:52:46

Vite 插件機制Rollup

2010-06-23 14:46:54

DHCP協議

2020-02-21 11:08:24

瀏覽器HTML設計

2015-09-06 10:58:36

PHP框架搭建結構

2010-01-06 15:18:51

Json插件

2020-08-04 13:40:02

數據可視化熱力圖表格

2011-09-09 15:31:04

Android Web插件

2020-11-02 11:33:52

ReactVue應用

2023-04-19 07:39:55

RustHTTP服務器

2021-12-02 10:05:01

鴻蒙HarmonyOS應用

2020-09-02 11:43:24

開發技能代碼

2013-09-03 09:58:51

Web前端

2009-06-26 13:51:49

jBPM4高級圖形執行

2010-03-29 15:13:23

Nginx反向代理

2017-07-04 17:55:37

Vue.js插件開發

2020-01-14 16:06:17

云原生混合云多云

2014-07-21 10:56:16

web CMSJavascriptjQuery插件

2012-06-04 09:48:04

jQuery
點贊
收藏

51CTO技術棧公眾號

欧美成人精品h版在线观看| 欧美影院精品一区| 精品免费一区二区三区蜜桃| 神马久久久久久久| 日韩精品午夜| 欧美精品一区二区三区在线播放| 欧美私人情侣网站| 超碰人人在线| 天天影视欧美综合在线观看| 日韩一级片网址| 成 年 人 黄 色 大 片大 全| 青青青免费视频在线2| 麻豆精品在线播放| 久久久久久午夜| 亚洲精品中文字幕乱码无线| 黄色视屏在线免费观看| 国产精品久久夜| 国产亚洲情侣一区二区无| 一区二区国产精品精华液| 午夜精品成人av| 一区二区三区四区视频精品免费| 欧洲一区二区日韩在线视频观看免费| 99草在线视频| 丝袜a∨在线一区二区三区不卡| 亚洲成人在线视频播放| 亚洲第一狼人区| 大菠萝精品导航| 18欧美乱大交hd1984| 国产精品扒开腿做爽爽爽视频 | 91视频在线看| 91在线观看免费高清| 日本熟妇一区二区三区| 午夜精品偷拍| 最新国产成人av网站网址麻豆| 真人bbbbbbbbb毛片| 精品中文在线| 欧美美女一区二区三区| 美脚丝袜一区二区三区在线观看| 国产乱淫av片免费| 日韩影院精彩在线| 中文字幕不卡在线视频极品| 三级视频网站在线观看| 丰满的护士2在线观看高清| 国产精品丝袜在线| 日本视频一区在线观看| 神马午夜一区二区| 国产成人丝袜美腿| 91久久精品国产91久久性色tv| 免费中文字幕视频| 亚洲国产精品久久久天堂| 中文字幕国产亚洲2019| 69xxx免费| 亚洲aⅴ网站| 欧美少妇性性性| 激情五月婷婷久久| 麻豆系列在线观看| 国产欧美一区二区精品性色 | 中文字幕免费视频| 天堂成人娱乐在线视频免费播放网站 | 一级黄色av片| 视频一区视频二区中文字幕| 日本一区二区不卡| 在线免费观看av网址| 老牛国产精品一区的观看方式| 2018中文字幕一区二区三区| wwwwxxxx国产| 自拍自偷一区二区三区| 亚洲视频在线免费观看| gv天堂gv无码男同在线观看| 欧美激情偷拍自拍| 久热精品视频在线| 免费人成视频在线| 国产农村妇女精品一区二区| 日韩最新免费不卡| 成人涩涩小片视频日本| 欧美三级网页| 欧美亚洲另类制服自拍| 国产男人搡女人免费视频| 久久99九九99精品| 亚洲一区中文字幕| 日韩在线视频免费| 国产日韩欧美一区二区三区综合| 亚洲精品一卡二卡三卡四卡| 成人免费高清| 精品国产乱码久久久久久婷婷| 亚洲欧美日韩国产成人综合一二三区| 色欧美激情视频在线| 一区二区三区精品视频| 久久精品无码中文字幕| 亚洲精品福利电影| 亚洲mv大片欧洲mv大片精品| 六月丁香婷婷在线| 亚洲人成网站在线在线观看| 日韩欧美一级片| 蜜桃精品成人影片| 色小子综合网| 欧美精品国产精品日韩精品| 欧美日韩a v| 国产另类ts人妖一区二区| 精品一区二区三区国产| 丝袜美腿美女被狂躁在线观看| 亚洲一区二区五区| 国产精品动漫网站| 99国内精品久久久久| 日韩成人在线免费观看| 亚洲一区电影在线观看| 国产欧美午夜| 91精品国产一区二区三区动漫 | 久热精品视频在线观看| 成人在线免费看视频| 午夜电影亚洲| 国产精品久久久久久久久久久新郎| 国内精品久久久久久久久久久| 久久人人97超碰com| 国产精品igao激情视频 | 在线看不卡av| 成年人小视频在线观看| 日韩欧美网站| 国产精品91一区| 日本精品999| 亚洲理论在线观看| 欧洲金发美女大战黑人| 在线免费三级电影网站| 日韩欧美二区三区| 农村老熟妇乱子伦视频| 玖玖精品视频| 久久伊人一区二区| 超碰在线网站| 欧美一级高清片在线观看| www..com.cn蕾丝视频在线观看免费版| 欧美午夜在线视频| 亚洲aa中文字幕| 最新电影电视剧在线观看免费观看| 色综合久久久久久久久| 精品中文字幕在线播放| 韩国在线视频一区| 亚洲影院在线看| 免费黄色网页在线观看| 欧美自拍丝袜亚洲| 亚洲av成人无码久久精品| 性色一区二区| 久久手机视频| 制服丝袜专区在线| 日韩激情在线视频| 欧美日韩一二三四区| 91麻豆免费看| 97xxxxx| 天堂日韩电影| 青青草原一区二区| 欧美另类自拍| 色婷婷久久综合| 国产sm调教视频| 日韩在线卡一卡二| 性欧美大战久久久久久久免费观看| 日本免费在线观看| 欧美日韩一区高清| 正在播放国产对白害羞| 免费高清在线一区| 国产高清精品一区二区| 日本在线视频网址| 精品88久久久久88久久久| 国产精品第56页| 91在线观看视频| 欧美日韩激情视频在线观看| 精品一区三区| 国产精品亚洲综合天堂夜夜| 欧美激情二区| 欧美成人乱码一区二区三区| 日韩精品成人在线| 国产亚洲美州欧州综合国| 国产原创精品在线| 欧美~级网站不卡| 国产一区不卡在线观看| av高清不卡| 日韩在线小视频| 亚洲成人久久精品| 欧美日韩精品在线观看| 国产亚洲精品熟女国产成人| 久久国内精品自在自线400部| 伊人久久在线观看| 欧美日韩一区二区三区四区不卡| 日本精品久久久久久久| 日本在线免费播放| 亚洲精品一区二区三区福利| 免费看一级视频| 国产欧美日本一区视频| 久久人人爽人人片| 久久亚洲美女| 26uuu成人| 久久97精品| 国产日韩视频在线观看| 国产白丝在线观看| 国产亚洲精品一区二区| а√中文在线资源库| 色香蕉久久蜜桃| 久久久久久久久久网站| 久久综合久久综合久久综合| 国产精欧美一区二区三区白种人| 亚洲狠狠婷婷| 免费观看中文字幕| 九九免费精品视频在线观看| 亚洲综合国产精品| 日韩在线观看不卡| 国外成人在线直播| 日韩专区在线| 亚洲深夜福利网站| 欧美 日韩 中文字幕| 欧美日韩在线播放三区四区| 在线观看亚洲天堂| 一区二区三区中文免费| 国产熟女一区二区| av在线一区二区| 奇米777在线视频| 日韩国产在线一| 怡红院av亚洲一区二区三区h| 亚洲精品99| 日韩精彩视频| 欧美人体视频| 国产精品入口免费| 国产精品亚洲综合在线观看| 国产精品欧美一区二区三区奶水| 第九色区av在线| 亚洲国产女人aaa毛片在线| 国产三级自拍视频| 欧美在线综合视频| 一级成人黄色片| 亚洲成人激情av| 激情小说中文字幕| 中文字幕字幕中文在线中不卡视频| 美女被到爽高潮视频| 久久综合资源网| 538国产视频| 成年人网站91| 亚洲高清无码久久| 丁香婷婷综合色啪| 国产资源在线视频| 亚洲视频福利| 精品免费久久久久久久| 中文字幕一区二区三区在线视频| 一区二区不卡在线观看| 精品久久不卡| 视频在线观看成人| 成人网18免费网站| 视频一区二区精品| 日韩激情免费| 一本久久a久久精品vr综合| 成人看的羞羞网站| 亚洲一区在线免费| 国产大片一区| ijzzijzzij亚洲大全| 一区二区日韩欧美| 黄黄视频在线观看| 国产精品久久| 国产精品无码人妻一区二区在线| 99精品国产在热久久| 成熟了的熟妇毛茸茸| 免费视频一区二区三区在线观看| 美女日批免费视频| 欧美一级专区| 一路向西2在线观看| 久久99久久99小草精品免视看| www.久久com| 成人黄色777网| 美国黄色a级片| 欧美国产精品一区二区| 久久嫩草捆绑紧缚| 亚洲自拍偷拍九九九| 成年人午夜视频| 日本韩国精品在线| 一级做a爱片性色毛片| 日韩一区和二区| 香蕉久久一区二区三区| 欧美一区二区黄| 亚洲免费不卡视频| 日韩精品丝袜在线| 2017亚洲天堂1024| 欧美国产视频一区二区| 国产中文在线视频| www.亚洲一区| 九色91在线| 国产成人激情视频| 国产日韩一区二区三免费高清| 国产精品久久波多野结衣| 色综合中文网| 日本美女爱爱视频| 香蕉久久久久久久av网站| 久久撸在线视频| 成人高清在线视频| 久久中文字幕精品| 亚洲国产精品久久人人爱蜜臀| 6080午夜伦理| 日韩欧美电影一区| 番号集在线观看| 久久久久免费视频| 日本h片久久| 国产精品国产精品国产专区蜜臀ah | 亚洲高清网站| 爱情岛论坛亚洲首页入口章节| 国产精品一区二区在线观看不卡| 欧美图片一区二区| 亚洲乱码国产乱码精品精的特点| 九一国产在线观看| 欧美一卡2卡3卡4卡| 成年人免费在线视频| 欧美激情视频网站| 成人国产精品一区二区网站| 免费精品视频一区| 欧美日韩国内| 精品亚洲视频在线| 国产校园另类小说区| 精品无码av在线| 欧美一区二区三区四区在线观看 | 国产精品久久网站| 国产又大又黄又粗| 欧美成人精品3d动漫h| 久久久久久久久免费视频| 国产成人一区三区| 美国成人xxx| 成年人网站国产| 狠狠狠色丁香婷婷综合激情| 91插插插插插插插插| 99久久精品国产导航| 天天干中文字幕| 911国产精品| 香蕉视频在线免费看| 国产suv精品一区二区三区88区| 成人免费直播在线| 青青视频免费在线观看| 久久国产麻豆精品| 免费成人深夜天涯网站| 色婷婷一区二区| 日本一级在线观看| 97国产精品人人爽人人做| 亚洲日本一区二区三区在线| 久久久成人精品一区二区三区| 日本在线不卡视频| 韩国女同性做爰三级| 色综合一区二区| 精品视频一二三| 国产99久久精品一区二区永久免费| 日韩电影在线观看完整免费观看| 免费看黄在线看| 本田岬高潮一区二区三区| 久久精品免费在线| 欧美不卡激情三级在线观看| 污视频免费在线观看| 亚洲综合一区二区不卡| 欧美在线日韩| 美女被爆操网站| 亚洲国产精品自拍| 欧美 日韩 国产 在线| 国内精品久久久久久久久| 久久精品论坛| 茄子视频成人免费观看| 久久久精品欧美丰满| 永久久久久久久| 欧美日韩免费一区| 少妇无码一区二区三区| 51ⅴ精品国产91久久久久久| 亚洲精品亚洲人成在线观看| 亚洲综合在线网站| 国产精品私人影院| av高清一区二区| 久久久久久久999| 日韩av网址大全| 亚洲狼人综合干| 国产精品免费看片| jizz中国少妇| 久久久亚洲国产| 蜜臀91精品国产高清在线观看| 一本久道中文无码字幕av| 国产精品美女久久久久aⅴ国产馆| 国产巨乳在线观看| 久久久久久久久久久免费 | 精品网站999| 欧洲精品一区二区三区久久| 久久只精品国产| ,一级淫片a看免费| 欧美激情国内偷拍| 国产精品视频一区二区三区四蜜臂| 999在线观看| 婷婷激情综合网| 久操视频在线观看| 狠狠色综合欧美激情| 免费成人小视频| 国产在线欧美在线| 一区二区三区精品99久久| 久久久久九九精品影院| 免费日韩中文字幕| 玉米视频成人免费看| 激情小视频在线| av一区观看| 欧美日本一区| 久久久久久国产精品无码| 日韩一卡二卡三卡| 日韩国产网站| 日韩中字在线观看| 国产精品国产三级国产三级人妇| 色呦呦中文字幕| 亚洲xxxxx|