开头
开始一个项目的时候,你可以去clone一个seed项目,但你clone完之后还是要配置一些东西,而且创建文件和更新文件依旧是人工处理,所以你需要yeoman来帮你搞定,已经有许多不错的生成器了,但创建一个属于自己的生成器就更好了。
事先要知道的东西
npm
node
javascript
yeoman
gulp
git
如果有一样你不懂,最好还是去先去看看。
准备
去github上创建一个项目,当然随便一个git托管都可以。因为我们在创建后是要发布的,至于项目的名字一定是用generator-name这种格式,不然到时候yeoman找不到你的这个脚手架。
以防万一,装一下yo,npm 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
然后我们创建两个文件夹app和router,之后再说有什么用。然后我们要把这两个文件夹的信息添加到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"
}
}
组织文件
让我们创建两个文件夹app和router。在执行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个章程,应该会按官网的顺序写个系列,但最好还是去看看原版的教程。欢迎提问和建议。