Grunt一辈子的好基友:yeoman
yeoman是什么
yeoman主要包含了三个工具:yo、grunt、bower。我们先看下这三个工具分别是做什么的:
- yo:脚手架工具,主要作用是创建项目骨架(跟grunt-init有点像)。
- grunt:构建工具,主要用来运行各种任务,比如文件压缩、合并、打包等。
- bower:主要用来做前端资源依赖管理,跟npm很像,区别在于:npm管理的是node模块的依赖,bower管理的是前端资源的依赖,如css、javascript文件等。
yeoman是做什么的
现在我们已经知道yeoman里面又什么东西了,那么它在我们的项目开发中扮演了一个什么样的角色呢?首先我们来看看官方对yeoman的定义:
MODERN WORKFLOWS FOR MODERN WEBAPPS
这句话其实比较抽象,很难一眼知道yeoman是做什么的。 我们注意里面的关键词 workflow ,也就是说yeoman贯穿了前端项目开发的始终。
在用到yeoman的项目中,我们的工作流程一般是:
- 创建项目骨架:运行yo工具,通过各种yeoman-generator(模板)创建项目骨架。
- 下载前端资源:运行
bower install
,下载项目中依赖的前端资源,比如jQuery、bootstrap、angularjs等(非必要) - 运行构建任务:运行grunt跑自动化构建任务(非必要)
入门例子:webapp
首先安装yo、bower、grunt-cli工具
npm install -g yo bower grunt-cli
然后,现在yeoman模板,比如 generator-webapp
(yeoman的模板前端都是generator-
)
npm install -g generator-webapp
初始化webapp项目,在任意空目录下运行下面命令,然后回答几个简单的问题
yo webapp
现在,项目骨架已经创建好了,运行下面命令安装依赖的前端资源
bower install underscore
最后,安装grunt依赖的包,运行构建任务,搞定!
npm install
grunt
为什么是yeoman,而不是grunt-init
grunt-init
的定位同样是前端脚手架。那 grunt + grunt-init 已经满足了我们从 项目创建 到 项目构建 的需求,为什么又冒出个yeoman出来? 从yeoman的受欢迎程度来看,可能有以下两方面原因:
- 解决了一些grunt + grunt-init 没有帮我们解决的问题
- 具有一些grunt + grunt-init 所没有的有用特性
答案是:两方面都有。
- 基于bower的前端资源依赖管理:这个的重要性无需强调,请回忆一下我们满头大汗就为了找到某个js文件,或因缺少某个依赖的js文件导致脚本出错的经历。具体可参考knight上周及本周分享 :)
- 子模板:相当有用的特性。你可以用它完成子项目创建、子模块创建、资源更新等工作,给项目提供了更多的灵活性。
- 基于问题的项目骨架构建:这点其实grunt-init也有,但yeoman明显做得更好,如二选一、单选列表、多选列表等。grunt-init 的问答流程内部实现则相对费解。。。
yeoman项目下几个重要的文件
主要就是下面几个文件,不赘述
- Gruntfile.js:grunt任务声明的地方
- package.json:项目依赖的插件,比如grunt任务依赖的插件等
- bower.json:前端资源依赖声明
创建自己的Generator(模板)
什么是generator就略过了,模板。。。直接进入实操步骤
首先安装 generator-generator
,名字比较诡异,意思是“模板的模板”
npm install -g yo generator-generator
创建一个叫做 generator-blog
的目录,命令行下进入这个目录,然后运行
yo generator
然后你会看到下面这坨东东
_-----_
| |
|--(o)--| .--------------------------.
`---------´ | Welcome to Yeoman, |
( _´U`_ ) | ladies and gentlemen! |
/___A___\ '__________________________'
| ~ |
__'.___.'__
´ ` |° ´ Y `
回答下面两个简单问题,搞定
[?] Would you mind telling me your username on Github? chyingp@gmail.com
[?] What's the base name of your generator? blog
在目录下运行如下命令,让当前创建的模板成为全局的模块
npm link
在其他任意目录运行如下命令,创建项目
yo blog
稍微看下generator-blog的细节
进入generator-blog目录,看看里面都有什么, bower.json、 package.json不赘述,我们需要关注的点: app
目录是模板的核心目录
其中, index.js
是项目骨架创建的主要逻辑,里面包含了问答设置以及处理、各种目录、文件操作等(从模板目录到目标目录)。根目录下的package.json主要声明了模板的名字、版本、git地址等。。。
├── app
│ ├── index.js
│ └── templates
│ ├── _bower.json
│ ├── _package.json
│ ├── editorconfig
│ ├── jshintrc
│ └── travis.yml
├── test
│ ├── test-creation.js
│ └── test-load.js
├── .editorconfig
├── .gitattributes
├── .gitignore
├── .jshintrc
├── .travis.yml
├── LICENSE
├── package.json
└── README.md
generator细节深入
@todo
generator子模板创建
@todo
Grunt一辈子的好基友:yeoman的更多相关文章
- yeoman bower grunt等安装
grunt-beginner前端自动化工具:http://www.imooc.com/learn/30 grunt的安装 官方站点:http://gruntjs.com/ 安装指令: sudo npm ...
- grunt 入门学习
前端工作流,Grunt上手指南 Posted@2013-04-20 7:15 a.m. CategoriesGrunt , javascript 我想先花点时间回忆一下作为一个前端需要做的工作(Lo ...
- yeoman(转)
前言有一种技术可以提高我们的工作效率,可以让我们专心做我们擅长的事,可以屏蔽复杂性,可以规范我们的架构和我们的代码,可以让我们的享受编程的乐趣.Yeoman可以做到. 很多年以前,rails刚刚出世, ...
- Yeoman自动构建js项目
Aug 19, 2013 Tags: bowergruntJavascriptjsnodejsyeomanyo Comments: 10 Comments Yeoman自动构建js项目 从零开始nod ...
- Grunt上手指南<转>
原文链接:http://www.hulufei.com/post/grunt-introduction 安装 如果之前有装过grunt,卸载之 npm uninstall -g grunt 安装gru ...
- 使用Yeoman搭建 AngularJS 应用 (11) —— 让我们搭建一个网页应用
原文地址:http://yeoman.io/codelab/prepare-production.html 让我们发布这个应用 优化产品的文件 为了创建应用的产品版本,我们想做如下的事情 检查你的代码 ...
- 前端工程构建工具之Yeoman
一.Yeoman 简介 通常在开发新项目时我们都需要配置工程环境,开发目录,需要下载一些库.框架文件(如 jQuery.Backbone 等),配置编译环境(Less.Sass.Coffeescrip ...
- 前端工程构建工具——Yeoman
一.Yeoman 简介 通常在开发新项目时我们都需要配置工程环境,开发目录,需要下载一些库.框架文件(如 jQuery.Backbone 等),配置编译环境(Less.Sass.Coffeescrip ...
- Grunt上手指南(转)
Grunt , javascript 我想先花点时间回忆一下作为一个前端需要做的工作(Loading...) JS合并 JS压缩 CSS压缩 CSS Sprite 图片优化 测试 静态资源缓存(版本 ...
随机推荐
- iOS下的 Fixed + Input 调用键盘的时候fixed无效问题解决方案
做touchweb开发的时候,做头疼的是,电脑上面时候好的,有些手机上面也是好的,个别手机和浏览器出现问题,对于这些,只能慢慢调试,找问题. 今天说一下比较老的IOS的问题,那就是"iOS下 ...
- First day in 阿里
周五上午10点半的飞机,为了便宜选了CA的空客320的飞机,结果体验很差.飞机涂了层风骚的粉紫色,机内较旧,也很小,经过所谓的头等舱简直惨不忍睹.对比起去年飞去北京乘的波音真是没法比,波音上每个人都有 ...
- vsphere平台为win系统动态扩展磁盘
1.关闭win虚拟机 2.在vcenter管理中加大磁盘空间 3.开启win虚拟机(此时磁盘并没有加大) 4.打开cmd命令行: 进入分区管理--->查看磁盘--->选择磁盘---> ...
- Daily Scrum 10.29
今天大家的工作做的还算不错,但是晚些时候遗憾的得知我们的吴文会同学生病住院了,所以她明天的任务暂时保留,再做调整.希望大家在努力学习工作的同时一定要注意身体啊! 下面是今天的Task统计:
- hdu A Bug's Life
题目意思:给定一系列数对,例如a和b,表示a和b不是同一种性别,然后不断的给出这样的数对,问有没有性别不对的情况. 例如给定: 1 2 3 4 1 3 那这里就是说1和2不是同种性别 ...
- 深入了解ios系统机制
1.什么叫ios? ios一般指ios(Apple公司的移动操作系统) . 苹果iOS是由苹果公司开发的移动操作系统.苹果公司最早于2007年1月9日的Macworld大会 ...
- mysql语句中有引号的问题解决方案
在mysql的查询.修改.插入.删除的sql语句里有引号如何处理? 例如: <? $name = "my name is xcxc"; $people = "i'm ...
- java基础比较好的笔记总结
http://wenku.baidu.com/link?url=02LPBvoYztYSd_htlE4wqzJPsA3pu8yKhIZ9yUiyvh0GT-S9D8TCXZ4flsaewkmnN9AY ...
- Unity3d优化
检测方式: 一,Unity3D 渲染统计窗口 Game视窗的Stats去查看渲染统计的信息: 1.FPS fps其实就是 frames per second,也就是每一秒游戏执行的帧数,这个数值越小, ...
- php课程---语句及函数
语句: 一:分支语句 1.if(条件1){满足条件1执行} 2.if(条件1){满足条件1执行}else{不满足条件1执行} 3.if(条件1){满足条件1执行}els ...