6

开头

开始一个项目的时候,你可以去clone一个seed项目,但你clone完之后还是要配置一些东西,而且创建文件和更新文件依旧是人工处理,所以你需要yeoman来帮你搞定,已经有许多不错的生成器了,但创建一个属于自己的生成器就更好了。

事先要知道的东西

  • npm
  • node
  • javascript
  • yeoman
  • gulp
  • git

如果有一样你不懂,最好还是去先去看看。

准备

去github上创建一个项目,当然随便一个git托管都可以。因为我们在创建后是要发布的,至于项目的名字一定是用generator-name这种格式,不然到时候yeoman找不到你的这个脚手架。

以防万一,装一下yonpm install -g yo

创建模块

首先是npm init,创建一个package.json

{
  "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。现在我们要安装一下依赖。

npm install --save yeoman-generator

然后我们创建两个文件夹approuter,之后再说有什么用。然后我们要把这两个文件夹的信息添加到package.json里,变成下面这样。

{
  "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"
  }
}

组织文件

让我们创建两个文件夹approuter。在执行yo name命令的时候,就会调用app文件夹里的内容。而yo name:command就会调用router里的内容。

再创建两个文件,看起来就像这样。

├─── 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个章程,应该会按官网的顺序写个系列,但最好还是去看看原版的教程。欢迎提问和建议。


limichange
4.2k 声望74 粉丝

本人已经不再这里玩了,


引用和评论

0 条评论