vue cli3 Generator插件開發(fā)教程

定制生成插件

vue cli3提供了擴(kuò)展定制化插件API。

CLI插件是一個(gè)可以為@vue/cli項(xiàng)目添加額外特性的npm包。

它始終包含一個(gè)Service插件作為其主要導(dǎo)出,可選包含一個(gè) Generator 和一個(gè) Prompt 文件。

當(dāng)前文檔講述如何編寫一個(gè)Generator插件。

Generator插件用于向package.json文件注入額外的依賴或字段,并向項(xiàng)目中添加或刪除文件。

一個(gè)Generator插件的目錄解構(gòu)是這樣的:

.
├── README.md
├── generator  # generator 插件的文件夾
    ├── index.js  # generator插件
├── index.js      # service 插件
└── package.json

Generator插件示例代碼:

// index.js
module.exports = (api, options, rootOptions, invoking) => {
    const pkg = {
        scripts: {
            test: 'vue-cli-service test'
        },
        dependencies:{
            'vue-router':'^3.0.1',
        }
    }
    // 修改 `package.json` 里的字段
    api.extendPackage(pkg)
    
    // 復(fù)制并用 ejs 渲染 `./template` 內(nèi)所有的文件
    api.render('./template')
    
    // 傳入api.render回調(diào)函數(shù),可以刪除文件或者修改文件,其中render函數(shù)依然使用ejs模板
    api.render((files, render) => {
        delete files['src/main.js']
        files['src/main.ts'] = render('./template/main.ts')
    })
?
    if (options.foo) {
        // 有條件地生成文件
    }
})

Generator的渲染模板:

當(dāng)調(diào)用api.render('./template')時(shí),該Generator插件會(huì)使用 EJS渲染./template下的所有文件。

還可以使用yaml前置信息繼承并替換已有的模板文件的一部分:

---
extend: '@vue/cli-service/generator/template/src/App.vue'   // 繼承文件
replace: !!js/regexp /<script>[^]*?<\/script>/              // 替換規(guī)則
---
?
<script>
export default {
  // 替換默認(rèn)腳本
}
</script>

也可以多出替換,你需要將要替換的字符串用<%# REPLACE %><%# END_REPLACE %> 塊包裹起來:

---
extend: '@vue/cli-service/generator/template/src/App.vue'
replace:
  - !!js/regexp /歡迎來到你的 Vue\.js 應(yīng)用/   // 第一個(gè)替換規(guī)則
  - !!js/regexp /<script>[^]*?<\/script>/  // 第二個(gè)替換規(guī)則
---
?
<%# REPLACE %>      // 對(duì)應(yīng)第一個(gè)替換規(guī)則
替換歡迎信息
<%# END_REPLACE %>
?
<%# REPLACE %>     // 對(duì)應(yīng)第二個(gè)替換規(guī)則
<script>
export default {
  // 替換默認(rèn)腳本
}
</script>
<%# END_REPLACE %>

{% hint style="warning" %}
注意:如果你想渲染一個(gè)以點(diǎn)開頭的模板文件(例如:.env),需要把文件名開頭的點(diǎn)改為下劃線(因?yàn)橐渣c(diǎn)開頭的文件會(huì)在插件發(fā)布到npm的時(shí)候忽略):

 _env

 # 調(diào)用api.render('./_env')后會(huì)在項(xiàng)目目錄中渲染為:

 .env

當(dāng)你想渲染以下劃線開頭的文件時(shí),需要把文件名開頭再添加一個(gè)下劃線:

 __env.less

 # 調(diào)用api.render('./__env.less')后會(huì)在項(xiàng)目目錄中渲染為:

 _env.less

{% endhint %}

發(fā)布插件

為了讓一個(gè) CLI 插件能夠被其它開發(fā)者使用,你必須遵循 vue-cli-plugin-<name> 的命名約定將其發(fā)布到 npm 上。插件遵循命名約定之后就可以:

  • @vue/cli-service 發(fā)現(xiàn);
  • 被其它開發(fā)者搜索到;
  • 通過 vue add <name>vue invoke <name> 安裝下來。

使用命令:

vue add <name>

安裝命令:

vue invoke <name>

至此完成,vue cli Generator插件已經(jīng)發(fā)布成功并且可以使用了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在實(shí)現(xiàn) egg + vue 服務(wù)端渲染工程化實(shí)現(xiàn)之前,我們先來看看前面兩篇關(guān)于Webpack構(gòu)建和Egg的文章: ...
    hubcarl閱讀 6,135評(píng)論 0 19
  • 基于Vue的一些資料 內(nèi)容 UI組件 開發(fā)框架 實(shí)用庫(kù) 服務(wù)端 輔助工具 應(yīng)用實(shí)例 Demo示例 element★...
    嘗了又嘗閱讀 1,287評(píng)論 0 1
  • Vue.js作為目前最熱門最具前景的前端框架之一,其提供了一種幫助我們快速構(gòu)建并開發(fā)前端項(xiàng)目的新的思維模式。本文旨...
    人不中二枉少年閱讀 1,450評(píng)論 0 19
  • 首先需要引入系統(tǒng)庫(kù):LocalAuthentication.framework 在調(diào)用的頁(yè)面引入庫(kù)的頭文件:#im...
    鄧布利多教授閱讀 489評(píng)論 0 1
  • 人啊,就像天氣預(yù)報(bào)一樣難伺候,說變就變。上一秒還是笑嘻嘻,下一秒就烏云密布。有時(shí)候人就喜歡因?yàn)閯e人的評(píng)價(jià)而讓自己...
    30d52c1e0f38閱讀 456評(píng)論 0 2

友情鏈接更多精彩內(nèi)容