開始一個項目的時候,你能夠去clone
一個seed
項目,但你clone
完以後仍是要配置一些東西,並且建立文件和更新文件依舊是人工處理,因此你須要yeoman
來幫你搞定,已經有許多不錯的生成器了,但建立一個屬於本身的生成器就更好了。javascript
若是有同樣你不懂,最好仍是去先去看看。java
去github上建立一個項目,固然隨便一個git託管均可以。由於咱們在建立後是要發佈的,至於項目的名字必定是用generator-name
這種格式,否則到時候yeoman找不到你的這個腳手架。node
以防萬一,裝一下yo
,npm install -g yo
。git
首先是npm init
,建立一個package.json
。github
{ "name": "generator-limi", "version": "0.0.1", "description": "My generator", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "https://github.com/limichange/generator-limi.git" }, "keywords": [ "yeoman-generator" ], "author": "limichange", "license": "MIT", "bugs": { "url": "https://github.com/limichange/generator-limi/issues" }, "homepage": "https://github.com/limichange/generator-limi" }
要注意下里面的關鍵字yeoman-generator
。如今咱們要安裝一下依賴。shell
npm install --save yeoman-generator
而後咱們建立兩個文件夾app
和router
,以後再說有什麼用。而後咱們要把這兩個文件夾的信息添加到package.json
裏,變成下面這樣。npm
{ "name": "generator-limi", "version": "0.0.1", "description": "My generator", "files": [ "app", "router" ], "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "https://github.com/limichange/generator-limi.git" }, "keywords": [ "yeoman-generator" ], "author": "limichange", "license": "MIT", "bugs": { "url": "https://github.com/limichange/generator-limi/issues" }, "homepage": "https://github.com/limichange/generator-limi", "dependencies": { "yeoman-generator": "^0.18.10" } }
讓咱們建立兩個文件夾app
和router
。在執行yo name
命令的時候,就會調用app
文件夾裏的內容。而yo name:command
就會調用router
裏的內容。json
再建立兩個文件,看起來就像這樣。gulp
├─── package.json ├─── app/ │ └─── index.js └───router/ └─── index.js
其實yeoman也支持另一種結構,像是這樣。架構
├─── package.json └─── generators/ ├─── app/ │ └───index.js └─── router/ └───index.js
如今要給你的腳手架構造靈魂了,就是他的建立行爲。
// app/index.js var generators = require('yeoman-generator'); module.exports = generators.Base.extend();
// app/index.js var generators = require('yeoman-generator'); module.exports = generators.Base.extend({ // 構造函數 constructor: function () { // 調用父類構造函數 generators.Base.apply(this, arguments); // 執行的時候接收 `--coffee` 參數 this.option('coffee'); } });
這些方法會在執行腳手架的時候被調用一次。當你運行完腳手架以後就會看到這些在命令行裏被打印出來。
// app/index.js var generators = require('yeoman-generator'); module.exports = generators.Base.extend({ method1: function () { console.log('method 1 just ran'); }, method2: function () { console.log('method 2 just ran'); } });
把上面的代碼合在一塊兒變成這樣。
// app/index.js var generators = require('yeoman-generator'); module.exports = generators.Base.extend({ // 構造函數 constructor: function () { // 調用父類構造函數 generators.Base.apply(this, arguments); // 執行的時候接收 `--coffee` 參數 this.option('coffee'); }, method1: function () { console.log('method 1 just ran'); }, method2: function () { console.log('method 2 just ran'); } });
雖然加的東西不是不少,但你已經有了一個能夠執行的腳手架了,試着來運行一下。
首先將這個項目連接到本地。
npm link
找個地方運行yo
,找到你建立的那個,而後執行。
shellmethod 1 just ran method 2 just ran
看起來不錯,恭喜你寫出了一個hello world
。
勉強仍是把這個東西順出來了,畢竟是按着官方的文檔作的。官網一共有9個章程,應該會按官網的順序寫個系列,但最好仍是去看看原版的教程。歡迎提問和建議。