Generators是Yeoman生態(tài)系統(tǒng)的一部分煌妈,它們是通過yo命令為最終用戶生成文件的插件蚀腿。
組織你的generators
設(shè)置為一個(gè)node模塊
generator本質(zhì)上是一個(gè)node.js的模塊
1.創(chuàng)建一個(gè)空文件夾用來寫你自己的generator。這個(gè)文件夾必須命名為generator-name(name是你自己的generator名字)舷嗡。這一點(diǎn)很重要轴猎,因?yàn)閅eoman依賴文件系統(tǒng)來查找可用的generator。
進(jìn)入你的generator文件以后咬崔,創(chuàng)建一個(gè)package.json文件税稼。這個(gè)文件是一個(gè)node module的manifest。你可以用npm init 這個(gè)命令初始化這個(gè)文件垮斯。
{
"name": "generator-name",//必須包含generator
"version": "0.1.0",
"description": "",
"files": [
"generators"
],
"keywords": ["yeoman-generator"],//必須包含yeoman-generator
"dependencies": {
"yeoman-generator": "^1.0.0"
}
}
必須保持yeoman-generator的最新版本做為依賴郎仆,安裝命令
npm install --save yeoman-generator
文件結(jié)構(gòu)樹
Yeoman的功能取決于如何構(gòu)建目錄樹。每個(gè)Sub-generators都包含在其自己的文件夾中兜蠕。
調(diào)用yo name時(shí)使用的默認(rèn)生成器是app generator扰肌。它必須包含在app/目錄中。
在輸入 yo name:subcommand, 會調(diào)用Sub-generators 熊杨,Sub-generators存儲在名為與子命令完全相同的文件夾中曙旭。
eg:
├───package.json
└───generators/
├───app/
│ └───index.js
└───router/
└───index.js
這個(gè)generator會暴露出 yo name 和 yo name:router命令
Yeoman允許兩種不同的目錄結(jié)構(gòu)。它將在./和generators/中注冊可用的generator晶府。
之前的例子也可以按照下面的結(jié)構(gòu)組織
├───package.json
├───app/
│ └───index.js
└───router/
└───index.js
如果你用這種結(jié)構(gòu)桂躏,保證你在package.json中的files中指定
{
"files": [
"app",
"router"
]
}
擴(kuò)展generator
一旦有了這個(gè)結(jié)構(gòu),就可以編寫實(shí)際的generator了川陆。
Yeoman提供了一個(gè)base generator剂习,你可以通過繼承它來獲得大部分的基礎(chǔ)行為
index.js
var Generator = require('yeoman-generator');
module.exports = class extends Generator {};
重寫構(gòu)造函數(shù)
module.exports = class extends Generator {
// The name `constructor` is important here
constructor(args, opts) {
// Calling the super constructor is important so our generator is correctly set up
super(args, opts);
// Next, add your custom code
this.option('babel'); // This method adds support for a `--babel` flag
}
};
加上自己的函數(shù)
每次調(diào)用生成器后,添加到原型中的每個(gè)方法都會運(yùn)行较沪,并且通常是按順序運(yùn)行的鳞绕。但是,正如我們將在下一節(jié)中看到的尸曼,一些特殊的方法名將觸發(fā)特定的運(yùn)行順序们何。
module.exports = class extends Generator {
method1() {
this.log('method 1 just ran');
}
method2() {
this.log('method 2 just ran');
}
};
//自動按序執(zhí)行,執(zhí)行順序 method1->method2
運(yùn)行
在這里控轿,我們已經(jīng)有一個(gè)可以運(yùn)行的generator了冤竹,下一步我們看怎么把它跑起來拂封,看是不是可以正常工作。
我們的generator是在本地的贴见,還不能作為一個(gè)全局的npm module可以使用npm創(chuàng)建全局模塊并將其符號鏈接到本地模塊烘苹,運(yùn)行:
npm link
它將安裝項(xiàng)目依賴項(xiàng)并將全局模塊符號鏈接到本地文件。npm完成后片部,您就可以調(diào)用yo name镣衡,并且應(yīng)該在終端中看到log。
尋找項(xiàng)目根目錄
在generator運(yùn)行時(shí)档悠,Yeoman將嘗試根據(jù)運(yùn)行它的文件夾的上下文來解決一些問題廊鸥。
最重要的是,Yeoman在目錄樹中搜索.yo-rc.json文件文件辖所。如果找到惰说,它會將文件的位置視為項(xiàng)目的根目錄。在后臺缘回,Yeoman將把當(dāng)前目錄改為.yo-rc.json文件文件位置并在那里運(yùn)行請求的generator吆视。
調(diào)用this.config.save文件()創(chuàng)建.yo-rc.json文件文件。
所以酥宴,如果generator沒有在當(dāng)前工作目錄中運(yùn)行啦吧,請確保目錄樹中沒有.yo-rc.json文件。
Yeoman-腳手架搭建工具《二》
Yeoman-腳手架搭建工具《三》
[原文鏈接]
(https://segmentfault.com/a/1190000038438057)