开头
开始一个项目的时候,你可以去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
,找到你创建的那个,然后执行。
shell
method 1 just ran method 2 just ran
看起来不错,恭喜你写出了一个hello world
。
结语
勉强还是把这个东西顺出来了,毕竟是按着官方的文档做的。官网一共有9个章程,应该会按官网的顺序写个系列,但最好还是去看看原版的教程。欢迎提问和建议。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。