Yeoman-腳手架搭建工具《二》

Prototype methods as actions

每個掛載到Generator prototype的方法都會被看成一個task。每一個task都會在Yeoman環境中按照順序運行。換個簡單的說法就是,object上經過Object.getPrototypeOf(Generator)返回的方法會自動執行。npm

Helper and private methods

有三個方式能夠建立不自動執行的方法segmentfault

1.給函數名稱加上_前綴(eg:_private_method)api

class extends Generator {
     method1() {//這個是一個task,會被自動運行
       console.log('hey 1');
     }

     _private_method() {//這個方法不會自動執行
       console.log('private hey');
     }
   }

2.用實例方法promise

class extends Generator {
     constructor(args, opts) {
       // Calling the super constructor is important so our generator is correctly set up
       super(args, opts)

       this.helperMethod = function () {//將方法掛載到this上
         console.log('won\'t be called automatically');
       };
     }
   }

3.擴展父generator異步

class MyBase extends Generator {
     helper() {
       console.log('methods on the parent generator won\'t be called automatically');
     }
   }

   module.exports = class extends MyBase {
     exec() {
       this.helper();
     }
   };

The run loop

若是隻有一個generator,按順序運行任務是能夠的。但一旦你開始把他們組合在一塊兒,這是不夠的。async

run loop是一個優先級隊列系統,優先級在代碼中定義爲特殊的原型方法名。當方法名與優先級名相同時,運行循環會將該方法推送到這個特殊隊列中。若是方法名與優先級不匹配,則將其推送到默認組中。函數

class extends Generator {
  priorityName() {}
}

你也能夠把多個方法組合起來工具

Generator.extend({
  priorityName: {
    method() {},
    method2() {}
  }
});

可用優先級爲(按運行順序):oop

1.initializing - 初始化方法 (checking current project state, getting configs, etc)


2.prompting - 提示用戶交互 (where you’d call this.prompt())
configuring - Saving configurations and configure the project (creating .editorconfig files and other metadata files)

3.default - 執行不匹配其餘的優先函數的函數

4.writing - Where you write the generator specific files (routes, controllers, etc)

5.conflicts - Where conflicts are handled (used internally)

6.install - Where installations are run (npm, bower)

7.end - Called last, cleanup, say good bye, etc

異步任務

有多種方法能夠暫停運行循環,直到任務以異步方式完成工做。this

最簡單的方式就是return a promise。當resolves執行的,loop能夠繼續執行。若是依賴的異步api不支持promise,能夠調用this.async()。eg:

asyncTask() {
  var done = this.async();

  getUserEmail(function (err, name) {
    done(err);
  });
}

Yeoman-腳手架搭建工具《一》
Yeoman-腳手架搭建工具《三》

相關文章
相關標籤/搜索