plop js 模板工具

## plop 模板工具

概述

plop 模板生成cli

安裝

// 全局安裝
npm i -g plop

// 本地安裝
npm i --save-dev plop

配置文件

// 更目錄創(chuàng)建文件 plopfile.js  plop將已該文件作為執(zhí)行入口

// 導(dǎo)出執(zhí)行函數(shù)
module.exports = function(plop){

    plop.getGenerator("模板名稱", {

        description: "操作描述",
        prompts: [], // 交互提示
        actions: [] // 執(zhí)行操作
    })

}

基礎(chǔ)使用

  • 注冊(cè)
// plopfile.js

module.exports = function(plop){

   plop.getGenerator("vue基礎(chǔ)模板", {
       description: '創(chuàng)建vue文件',
       prompts: [
           {
               type: 'input',  // 交互類型
               name: 'name',   // 參數(shù)名稱
               message:'請(qǐng)輸入文件名稱' // 交互提示
           },
           {
               type: 'input',
               name: 'path',
               message: '請(qǐng)輸入文件創(chuàng)建目錄'
           }
       ],
       actions: [
           {
               type: 'add', // 動(dòng)作類型
               path: '{{ path }}/{{ name }}.vue', // '{{  }}' 雙大括號(hào)內(nèi)設(shè)置動(dòng)態(tài)參數(shù)
               templateFile: 'plop-templates/views/vue.hbs' // 模板文件地址, 使用hbs文件
           }
       ]

   })
}

// plop-templates/views/vue.hbs

<template>
    <div class='cmp-{{ name }}' >
    </div>
</template>
<script>
export default {
    name: '{{ name }}'
}
</script>
<style>
</style>

  • 執(zhí)行命令

    plop
    ...
    
    請(qǐng)輸入文件名稱  tmp
    請(qǐng)輸入文件名稱  template/cmp
    
    
  • 執(zhí)行結(jié)果

    // root/template/cmp/tmp.vue
    
    <template>
        <div class='cmp-tmp' >
        </div>
    </template>
    <script>
    export default {
        name: 'tmp'
    }
    </script>
    <style>
    </style>
    
    

plop 命令參數(shù)

// 執(zhí)行指定配置
plop 配置名稱

// 執(zhí)行指定配置并設(shè)置參數(shù)
plop 配置名稱 輸入?yún)?shù)

// 執(zhí)行 plopfile 文件
--plopfile 文件路徑

// 設(shè)置工作路徑
--cwd

// 幫助
-h, --help

// 全局初始化
-i, --init

// 顯示版本
-v, --version

generator 生成器 API

生成器, 用來生成執(zhí)行文件模板或向文件中加入模板信息

  • description 描述生成器行為
  • prompts 提示配置 詳情
    • type 交互類型 input number checkbox ...
    • name 參數(shù)使用存儲(chǔ)的屬性名
    • message 提示信息
    • default 參數(shù)默認(rèn)值
    • ....
  • actions 執(zhí)行配置 詳情
    • type 預(yù)設(shè)類型 add modify addMany etc
    • force
    • data 返回給模板的數(shù)據(jù)
    • abortOnFail 當(dāng)有action 執(zhí)行失敗時(shí), 是否終止其他 action

默認(rèn) action API

  • addA 創(chuàng)建文件

    • path 文件生成目錄

    • template 模板字符串, 使用字符串模板生成文件內(nèi)容

      {
          template: '<h1>{{ title }} <h1>'
      }
      
      
  • templateFile 模板文件地址, 使用模板文件生成文件

  • skipIfExists 如果文件已存在,將跳過

  • force

  • data 模板參數(shù)

  • abortOnFail 當(dāng)有action 執(zhí)行失敗時(shí)纹因, 是否終止其他 action

  • addMany 創(chuàng)建多個(gè)文件

    • destination

    • base 替換的基礎(chǔ)目錄

      {   
          destination:'target',
          base: 'root/sub',
          templateFiles: 'root/sub/*.hbs'
      }
      
      // 生成的文件目錄: target/file.hbs
      
      
  • templateFiles 模板文件匹配規(guī)則 參考

    {
        templateFiles: 'plop-templates/view/*.hbs'
    }
    
    
  • globOptions 更改匹配方式

  • stripExtensions

  • verbose 是否打印所有文件目錄

  • skipIfExists

  • force

  • data

  • abortOnFail

  • modify 修改

    • path
    • pattern 替換規(guī)則 正則
    • template
    • templateFile
    • data
    • abortOnFail
  • append 添加

    • path
    • pattern 插入規(guī)則 正則
    • unique
    • separator
    • template
    • templateFile
    • data
    • abortOnFail

模塊分組

我們可將多個(gè) 配置分配到多個(gè)文件中單獨(dú)管理

//  module/view/prompt.js 頁面模板
const conf = {
    description: "view template",
    prompts: [
        {
            type: 'input',
            name: 'name',
            message: 'file name',
        }
    ],
    actions: data => {

        const name = '{{name}}'
        return [
            {
                type: 'add',
                path: `template/${name}.vue`,
                templateFile: 'plop-templates/view/index.hbs',
            }
        ]

    }
}

module.exports = function (plop){
    plop.setGenerator('view', conf)
}

//  module/components/prompt.js 組件模板
const conf = {
    description: "cmp template",
    prompts: [
        {
            type: 'input',
            name: 'name',
            message: 'file name',
        }
    ],
    actions: data => {

        const name = '{{name}}'
        return [
            {
                type: 'add',
                path: `template/${name}.vue`,
                templateFile: 'plop-templates/cmp/index.hbs',
            }
        ]

    }
}

module.exports = function (plop){
    plop.setGenerator('view', conf)
}

// root/plopfile.js 
const viewCallback = require('./plop-templates/view/prompt')
const cmpCallback = require('./plop-templates/cmp/prompt')

module.exports = function(plop){
    cmpCallback(plop)
    viewCallback(plop)
}

其他

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖袱巨,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阁谆,死亡現(xiàn)場離奇詭異,居然都是意外死亡愉老,警方通過查閱死者的電腦和手機(jī)场绿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫉入,“玉大人焰盗,你說我怎么就攤上這事≈淞郑” “怎么了熬拒?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長垫竞。 經(jīng)常有香客問我澎粟,道長,這世上最難降的妖魔是什么欢瞪? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任活烙,我火速辦了婚禮,結(jié)果婚禮上遣鼓,老公的妹妹穿的比我還像新娘啸盏。我一直安慰自己,他們只是感情好骑祟,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布回懦。 她就那樣靜靜地躺著气笙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粉怕。 梳的紋絲不亂的頭發(fā)上健民,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音贫贝,去河邊找鬼秉犹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛稚晚,可吹牛的內(nèi)容都是我干的崇堵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼客燕,長吁一口氣:“原來是場噩夢啊……” “哼鸳劳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起也搓,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤赏廓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后傍妒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幔摸,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年颤练,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了既忆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嗦玖,死狀恐怖患雇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宇挫,我是刑警寧澤苛吱,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站器瘪,受9級(jí)特大地震影響又谋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娱局,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一彰亥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧衰齐,春花似錦任斋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘟檩。三九已至,卻和暖如春澈蟆,著一層夾襖步出監(jiān)牢的瞬間墨辛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工趴俘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留睹簇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓寥闪,卻偏偏與公主長得像太惠,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疲憋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345