Generators是Yeoman生態系統的一部分,它們是經過yo命令爲最終用戶生成文件的插件。node
generator本質上是一個node.js的模塊npm
1.建立一個空文件夾用來寫你本身的generator。這個文件夾必須命名爲generator-name(name是你本身的generator名字)。這一點很重要,由於Yeoman依賴文件系統來查找可用的generator。json
進入你的generator文件之後,建立一個package.json文件。這個文件是一個node module的manifest。你能夠用npm init 這個命令初始化這個文件。segmentfault
{ "name": "generator-name",//必須包含generator "version": "0.1.0", "description": "", "files": [ "generators" ], "keywords": ["yeoman-generator"],//必須包含yeoman-generator "dependencies": { "yeoman-generator": "^1.0.0" } }
必須保持yeoman-generator的最新版本作爲依賴,安裝命令babel
npm install --save yeoman-generator
Yeoman的功能取決於如何構建目錄樹。每一個Sub-generators都包含在其本身的文件夾中。app
調用yo name時使用的默認生成器是app generator。它必須包含在app/目錄中。函數
在輸入 yo name:subcommand, 會調用Sub-generators ,Sub-generators存儲在名爲與子命令徹底相同的文件夾中。工具
eg:ui
├───package.json └───generators/ ├───app/ │ └───index.js └───router/ └───index.js
這個generator會暴露出 yo name 和 yo name:router命令this
Yeoman容許兩種不一樣的目錄結構。它將在./和generators/中註冊可用的generator。
以前的例子也能夠按照下面的結構組織
├───package.json ├───app/ │ └───index.js └───router/ └───index.js
若是你用這種結構,保證你在package.json中的files中指定
{ "files": [ "app", "router" ] }
一旦有了這個結構,就能夠編寫實際的generator了。
Yeoman提供了一個base generator,你能夠經過繼承它來得到大部分的基礎行爲
index.js var Generator = require('yeoman-generator'); module.exports = class extends Generator {};
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 } };
每次調用生成器後,添加到原型中的每一個方法都會運行,而且一般是按順序運行的。可是,正如咱們將在下一節中看到的,一些特殊的方法名將觸發特定的運行順序。
module.exports = class extends Generator { method1() { this.log('method 1 just ran'); } method2() { this.log('method 2 just ran'); } }; //自動按序執行,執行順序 method1->method2
在這裏,咱們已經有一個能夠運行的generator了,下一步咱們看怎麼把它跑起來,看是否是能夠正常工做。
咱們的generator是在本地的,還不能做爲一個全局的npm module可使用npm建立全局模塊並將其符號連接到本地模塊,運行:
npm link
它將安裝項目依賴項並將全局模塊符號連接到本地文件。npm完成後,您就能夠調用yo name,而且應該在終端中看到log。
在generator運行時,Yeoman將嘗試根據運行它的文件夾的上下文來解決一些問題。
最重要的是,Yeoman在目錄樹中搜索.yo-rc.json文件文件。若是找到,它會將文件的位置視爲項目的根目錄。在後臺,Yeoman將把當前目錄改成.yo-rc.json文件文件位置並在那裏運行請求的generator。
調用this.config.save文件()建立.yo-rc.json文件文件。
因此,若是generator沒有在當前工做目錄中運行,請確保目錄樹中沒有.yo-rc.json文件。