yeoman - 搭建自己的脚手架 - 1

码影探星使
• 阅读 11487

开头

开始一个项目的时候,你可以去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个章程,应该会按官网的顺序写个系列,但最好还是去看看原版的教程。欢迎提问和建议。

点赞
收藏
评论区
推荐文章
Jacquelyn38 Jacquelyn38
4年前
一篇文章带你使用Typescript封装一个Vue组件
搭建项目以及初始化配置vue create tsvuebtn这里使用了vueCLI3自定义选择的服务,我选择了ts、stylus等工具。然后创建完项目之后,进入项目。使用快捷命令code.进入Vscode编辑器(如果没有code.,需要将编辑器的「bin文件目录地址」放到环境变量的path中)。然后,我进入编辑器之后,进入设置工作区,随便设置一个
Jacquelyn38 Jacquelyn38
4年前
Js可以写桌面应用端?
1、下载nw.jshttps://nwjs.io/最好下载sdk版本。2、解压打开安装包下载完之后,解压打开图中的「app文件夹」是我自己创建的,你也需要自己创建一个,里面放你项目文件。「app文件夹」中一般放一个index.html(页面展示),另外还需要创建一个package.json文件(参数配置):        "name":  "first 
Ustinain Ustinain
4年前
dll导出函数
导出函数的概念为什么要导出函数,导出来用来干什么?前面我们说过,初识DLL,当我们执行某一个程序的时候,相应的dll文件会被调用,一个程序可以调用多个dll,一个dll也可以被多个应用程序调用那么它是调用了全部的东西吗,还是调用了内部一些不为人知的东西举一个例子:你去便利店买水果,你和售货员说,你要买下整个便利店,那么她还以为你是个神经病,肯定不会卖,你要
虾米大王 虾米大王
3年前
java代码030
code030.jspsession你的名字是:
Jacquelyn38 Jacquelyn38
4年前
牛逼!五分钟开发一款桌面版应用
1、下载nw.jshttps://nwjs.io/最好下载sdk版本。2、解压打开安装包下载完之后,解压打开图中的app文件夹是我自己创建的,你也需要自己创建一个,里面放你项目文件。app文件夹中一般放一个index.html(页面展示),另外还需要创建一个package.json文件(参数配置):        "name":  "first  ap
虾米大王 虾米大王
2年前
java代码031
code031.jspsession保存你的名字:你喜欢去的地方:
虾米大王 虾米大王
2年前
java代码031
code032.jsp显示结果显示结果你的名字:你喜欢去的地方:
Stella981 Stella981
3年前
Android拨号键盘增加魔力爱心数字
目的:在拨号键盘输入\\5201314\\启动自定义的某个(隐藏)应用,大胆说出你的爱!1\.修改Android源码dialer相关代码,自定义android\_secret\_code并在afterTextchanged函数中发出处理广播:vim packages/apps/Dialer/src/
Wesley13 Wesley13
3年前
ORACLE纯SQL实现多行合并一行
项目中遇到一个需求,需要将多行合并为一行。表结构如下:NAME                           Null          Type\    N\_SEC\_CODE                NOTNULL CHAR(6
Wesley13 Wesley13
3年前
APP 验证码 采用MEMCAHED验证的坑
都知道APP不是用浏览器来的,所以验证码生成sessioncookie是行不通了。一开始APP进入验证码界面,先让他请求一次服务器,生成key:code返回去。再把拿到的KEY带到服务器上面去生成图片。同时生成一个key:code再把key返回到客户端,当客户端验证图片的时候再把key再到服务器上去获取key里的code进行对比。一旦对比成功放行,对比
Stella981 Stella981
3年前
PowerDesigner列名、注释内容互换
在用PowerDesigner时,常常在NAME或Comment中写中文在Code中写英文,Name只会显示给我们看,Code会使用在代码中,但Comment中的文字会保存到数据库TABLE的Description中,有时候我们写好了Name再写一次Comment很麻烦,以下两段代码就可以解决这个问题。在PowerDesigner中PowerDesig