编写自己的yeoman generator

在构建前端项目时,使用yeoman generator可以帮助我们完成新建文件、安装模块、类库等重复性操作,然而已有的generator有时并不能满足需求,所以可以利用yeoman 的API来构建自己的生成器。

这里介绍自定义generator的大致步骤。

1. $ npm install -g generator-generator

2. $ yo generator

输入你的github用户名、生成器的名字(注意命名,yoeman会为你输入的名字添加前缀generator)

看一下生成的文件目录结构:

3. 编写generator

我们需要编写的文件主要是 app/index.js ,看下index文件的内容:

'use strict';
var util = require('util');
...

var MygeneratorGenerator = yeoman.generators.Base.extend({
  init: function () {
    // 初始化模块
    ...
  },

  askFor: function () {
    ...
  },

  app: function () {
    ...
  },

  projectfiles: function () {
    ...
  }
});

module.exports = MygeneratorGenerator;

这里省略了函数体,这样可以清楚的看到文件结构。

编写这个index.js时有几处需要注意的地方:

* module.exports

* 继承 yeoman.generators.Base

* 执行yo mygenerator 时模块中的所有方法会依次执行(即 init(), aksFor(), app(), projectfiles()顺次),如果需要加入私有方法(供其他方法调用)有多种方式,个人感觉比较方便的是直接在方法名之前添加下划线,如

_protectedMethod: function() {
     console.log('This is a protected function.');
}

还是以一个简单的示例介绍几个基本的API。示例generator实现的效果:生成一个配置好gulp的livereload功能的项目。

index.js文件完整代码

'use strict';

var util = require('util');
var path = require('path');
var yeoman = require('yeoman-generator');
var yosay = require('yosay');
var chalk = require('chalk');

var MygeneratorGenerator = yeoman.generators.Base.extend({
  init: function () {
    this.pkg = require('../package.json');
    this.on('end', function () {
      if (!this.options['skip-install']) {
        this.installDependencies();
      }
    });
  },

  askFor: function () {
    var done = this.async();

    // 建议使用this.log() 而不是console.log, 因为在非命令行环境下console.log()不会显示
    this.log(yosay('Hi Keith, this is a new generator!'));
    var prompts = [{
      type: 'confirm',
      name: 'someOption',
      message: 'Hello boy, would you like to enable this option?',
      default: true
    }];

    this.prompt(prompts, function (props) {
      this.someOption = props.someOption;

      done();
    }.bind(this));
  },

  app: function () {
    //创建目录
    this.mkdir('app');
    this.mkdir('app/templates');

    // this.copy() 第一个参数为源文件名,默认目录为app/templates, 第二个参数为目标文件
    this.copy('index.html', 'app/index.html');
    this.copy('_package.json', 'package.json');
    this.copy('_bower.json', 'bower.json');
  },

  gulp: function() {
    var done = this.async();

    // 安装gulp模块, this.npmInstall()会解决模块安装问题,对同一模块只安装一次
    this.npmInstall(['gulp', 'gulp-connect'], { 'saveDev': true }, done);
    this.template('gulpfile.js');
  },

  projectfiles: function () {
    this.copy('editorconfig', '.editorconfig');
    this.copy('jshintrc', '.jshintrc');
  }
});

module.exports = MygeneratorGenerator;

index.js中的app方法中执行了copy函数,所以我们要在相应的目录(app/templates)下建立所需源文件,在app/templates 新建index.html。

index.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Hello yeoman</title>
</head>
<body>
  <h1>Hello World</h1>
  <h2> This is my own yeoman generator!</h2>
</body>
</html>

在index.js中的gulp方法中还使用到了this.template方法,同样需要在app/templates目录下建立一个模板文件 gulpfils.js

gulpfile.js(这里对文件内容不做详细介绍)

'use strict';

var gulp = require('gulp'),
    connect = require('gulp-connect');

gulp.task('default', ['clean'], function () {
    gulp.start('start');
});

gulp.task('server', function() {
  connect.server({
    root: 'app',
    livereload: true
  });

  gulp.watch(['app/*.html'], ['html']);
});

gulp.task('html', function() {
  gulp.src('app/*.html')
    .pipe(connect.reload());
});

gulp.task('start', function() {
    console.log('This is default task, Developing...');
});

gulp.task('clean', function() {
  console.log('cleaning...');
});

此时,一个基本的generator就已经编写完毕。

4. 使用generator

写好generator后可以将它发布到npm中,这里先在本地使用,在generator根目录下执行

$ npm link

接下来就和使用其他yeoman generator一样了,在任意工作目录下执行

$ yo mygenerator

等待安装完毕,cd到新建项目的根目录下,使用livereload功能(修改html文件保存后浏览器自动刷新),执行

$ gulp server

访问 http://localhost:8080即可

到此一个基本的generator构建加使用过程就已经结束,关于自定义generator的更多API请参考官方文档http://yeoman.github.io/generator/

构建generator官方教程http://yeoman.io/authoring/getting-started.html

时间: 2024-12-16 09:36:57

编写自己的yeoman generator的相关文章

Yeoman generator

使用Yeoman generator来规范工程的初始化 前言 随着开发团队不断发展壮大,在人员增加的同时也带来了协作成本的增加:业务项目越来越多,类型也各不相同.常见的类型有基础组件.业务组件.基于React的业务项目.基于Vue的业务项目等等.如果想要对每个项目进行一些规范上的约束比如Git提交规范.Javascript规范简直难于登天.所有的这些,只是因为还欠缺一个好用的工程化工具,在项目创建的初期自动的将这些目录结构和文件生成.并且集成工程常见的规范来进行约束. 本文分为两部分,首先会谈谈

使用MeanJS Yeoman Generator

1.首先全局安装该生成器 sudo npm install -g generator-meanjs 2.为项目创建一个路径 mkdir xmen && cd xmen 3.创建app yo meanjs 根据提示,输入应用名,描述,关键词,是否创建crud例子.. 4.运行app sudo NODE_ENV=development grunt 以开发环境运行app 如果使用production环境运行,需要在运行前,先生成下 grunt build 5.添加crud模块 yo meanjs

编写自定义Yeoman生成器

转载自JSCON-简时空:<自定义Yeoman生成器> 1.Getting Started 1.1.设置Node模块 Yeoman提供了generator-generator方便快速编写自己的生成器. 安装: npm install -g generator-generator运行: yo generator 创建一个名为generator-name的文件夹(name为你的生成器名);[important] 创建package.json文件,这是NodeJS模块的“信息图”,可以手动或者使用命

为什么选择 Yeoman 及 Yeoman 的安装

今天向您介绍一个我刚接触到的比较新的网络前端开发工具: Yeoman . 什么是Yeoman? Yeoman是Google的团队和外部贡献者团队合作开发的一个项目.通过内部三个工具(yo,grunt,bower)的协 同工作,为开发者创建一个易用的工作流.它可以让网络前端开发者快速打造一个漂亮的网络应用(web applications) . Yeoman的目的不仅是要为新项目建立工作流,同时还是为了解决前端开发所面临的诸多严重问题,例如零 散的依赖关系. Yeoman主要有三部分组成:yo.g

Yeoman - scaffold JavaScript Web Application

Yeoman - scaffold JavaScript Web Application (setup new JavaScript web app quickly) depend on two tools:-Grunt, JavaScript task runner-Bower, A package manager for web step0, install Node.js and NPMstep1, install Grunt: # npm install -g grunt-clistep

MEANJS Yo Generator

Overview View On Github One of the most frequently asked features from MEAN users is a way to scaffold their applications. As we looked for a way to help the community build and deploy production level MEAN applications, we decided to go with a Yeoma

VS Code安装yo(Yeoman) 插件下载.net core 模版代码开发

在安装插件以前,请看插件地址的相关依赖 Pre-requirements [Node.js] (https://nodejs.org) [npm] (https://www.npmjs.com) [Yeoman] (http://yeoman.io) A Yeoman generator of choice 主要过程: 1.VS Code 安装yo 插件 ext install yo vs code yo插件地址: https://marketplace.visualstudio.com/ite

用MeanJS和Yeoman生成器生成【翻译】

One of my favorite things with Yii is the Gii (Generator). 关于Yii(php框架)我喜爱的事情之一是Gii(生成器)Global Information Infrastructure. With a few clicks I could simply add a few Models/Controllers/Views (or all of the above), then build/customize those. 我只需要点击几次

前端工程化系列[06]-Yeoman脚手架核心机制

在前端工程化系列[05] Yeoman脚手架使用入门这边文章中,对Yeoman的使用做了简单的入门介绍,这篇文章我们将接着探讨Yeoman这个脚手架工具内部的核心机制,主要包括以下内容 ? Yeoman脚手架工具的价值讨论? generator[生成器]的内部结构? generator[生成器]的项目模板? Yeoman脚手架工具的核心运转机制? Yeoman 的主要组装流程 Yeoman这样的脚手架工具解决了什么问题? 所有新事物都不是凭空产生的,它们的出现总有某些内在的驱动力.一项新技术,一