热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

编写自己的yeomangenerator

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

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

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

1. $ npm install -g generator-generator

2. $ yo generator

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

bubuko.com,布布扣


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

bubuko.com,布布扣


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








Hello World


This is my own yeoman generator!




在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













推荐阅读
  • 本文详细介绍了在 Vue.js 前端框架中集成 vue-i18n 插件以实现多语言支持的方法。通过具体的配置步骤和示例代码,帮助开发者快速掌握如何在项目中实现国际化功能,提升用户体验。同时,文章还探讨了常见的多语言切换问题及解决方案,为开发人员提供了实用的参考。 ... [详细]
  • Vue应用预渲染技术详解与实践 ... [详细]
  • 深入浅出 webpack 系列(二):实现 PostCSS 代码的编译与优化
    在前一篇文章中,我们探讨了如何通过基础配置使 Webpack 完成 ES6 代码的编译。本文将深入讲解如何利用 Webpack 实现 PostCSS 代码的编译与优化,包括配置相关插件和加载器,以提升开发效率和代码质量。我们将详细介绍每个步骤,并提供实用示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • AngularJS 进阶指南:第三部分深入解析
    在本文中,我们将深入探讨 AngularJS 的指令模型,特别是 `ng-model` 指令。`ng-model` 指令用于将 HTML 元素与应用程序数据进行双向绑定,支持多种数据类型验证,如数字、电子邮件地址和必填项检查。此外,我们还将介绍如何利用该指令优化表单验证和数据处理流程,提升开发效率和用户体验。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 在Conda环境中高效配置并安装PyTorch和TensorFlow GPU版的方法如下:首先,创建一个新的Conda环境以避免与基础环境发生冲突,例如使用 `conda create -n pytorch_gpu python=3.7` 命令。接着,激活该环境,确保所有依赖项都正确安装。此外,建议在安装过程中指定CUDA版本,以确保与GPU兼容性。通过这些步骤,可以确保PyTorch和TensorFlow GPU版的顺利安装和运行。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • FreeBSD环境下PHP GD库安装问题的详细解决方案
    在 FreeBSD 环境下,安装 PHP GD 库时可能会遇到一些常见的问题。本文详细介绍了从配置到编译的完整步骤,包括解决依赖关系、配置选项以及常见错误的处理方法。通过这些详细的指导,开发者可以顺利地在 FreeBSD 上完成 PHP GD 库的安装,确保其正常运行。此外,本文还提供了一些优化建议,帮助提高安装过程的效率和稳定性。 ... [详细]
  • 本文探讨了如何通过检测浏览器类型来动态加载特定的npm包,从而优化前端性能。具体而言,仅在用户使用Edge浏览器时加载相关包,以提升页面加载速度和整体用户体验。此外,文章还介绍了实现这一目标的技术细节和最佳实践,包括使用User-Agent字符串进行浏览器识别、条件加载策略以及性能监控方法。 ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
  • 解决lib-flexible安装过程中遇到的错误问题
    在安装 lib-flexible 时,遇到了 `saveError ENOENT: No such file or directory` 错误,具体表现为无法打开 `E:\Github\SDIO\package.json` 文件。解决此问题的关键在于确保项目根目录下存在 `package.json` 文件,并且在正确的项目路径中执行安装命令。建议先检查项目结构,确认文件是否存在,然后再尝试重新安装依赖。 ... [详细]
  • 在Python网络编程中,多线程技术的应用与优化是提升系统性能的关键。线程作为操作系统调度的基本单位,其主要功能是在进程内共享内存空间和资源,实现并行处理任务。当一个进程启动时,操作系统会为其分配内存空间,加载必要的资源和数据,并调度CPU进行执行。每个进程都拥有独立的地址空间,而线程则在此基础上进一步细化了任务的并行处理能力。通过合理设计和优化多线程程序,可以显著提高网络应用的响应速度和处理效率。 ... [详细]
  • 在GitHub上克隆vue-element-admin项目时遇到依赖安装错误
    在 GitHub 上克隆 vue-element-admin 项目后,使用 `npm install` 安装依赖时遇到了未知的 Git 错误。具体错误信息为 `npm ERR! code 128`,提示命令执行失败。这可能是由于网络问题、Git 配置不正确或某些依赖包的仓库地址无效导致的。建议检查网络连接、更新 Git 版本并确保所有依赖项的 URL 正确无误。 ... [详细]
author-avatar
Yafei2702933480
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有