yoeman 简介:http://www.infoq.com/cn/news/2012/09/yeoman
yeoman 官网: http://yeoman.io/
yeoman 是快速创建骨架应用程序的WEB前端工具,实际由 yo, grunt, bower 三个组建而成。
Yo scaffolds out a new application, writing your Grunt configuration and pulling in relevant Grunt tasks that you might need for your build.
Grunt is used to build, preview and test your project, thanks to help from tasks curated by the Yeoman team and grunt-contrib.
Bower is used for dependency management, so that you no longer have to manually download and manage your scripts.
简单来说就是 Yo 是配置 Grunt 的 task 的工具,Grunt 是一个部署、预览和测试前端项目的工具,而 Bower 是一个包的管理工具,可以下载 jquery, backbone 等库。
PS: 要运行 yeoman 首先需要配置环境,配置好 node.js 、git 环境。
下面开始写一个 todo-list demo 作为例子
一、首先安装 yo,这会自动安装 grunt, bower
npm install -g yonpm install -g generator-webapp
PS: yo 是命令开头,webapp 是 另外一个参数. yo 可以生成其他各种应用配置。如 backbone, angularjs等,前提首先安装 generator-backbone,即
yo webapp
此时可以看到
webapp 默认带有 Sass 版的 bootstrap库,等到下载完毕后可以看到以下文件:
app 为项目主目录,是部署的根目录
node_modules 为 nodejs的包文件
test 为测试目录,专门用于单元测试,用的是 mocha 来测试
Gruntfile.js 是配置 grunt 自动化任务的配置文件,具体配置可以参考下 Grunt官网
二、添加JS库,这里添加 backbone,bower 会自动下载 underscore.
bower install backbone
三、运行
grunt server
它将运行应用,并监控文件的变化,一旦有改变,就会自动刷新浏览器。
文件又这几个,用的是
- HTML5 Boilerplate 模板(默认)
- RequireJS (可选)
四、开始写应用
index.html
<!doctype html> <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]--> <!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title></title> <meta name="description" content=""> <meta name="viewport" content="width=device-width"> <!-- Place favicon.ico and apple-touch-icon.png in the root directory --> <!-- build:css(.tmp) styles/main.css --> <link rel="stylesheet" href="styles/bootstrap-2.3.2.min.css"> <link rel="stylesheet" href="styles/main.css"> <!-- endbuild --> <!-- build:js scripts/vendor/modernizr.js --> <script src="bower_components/modernizr/modernizr.js"></script> <!-- endbuild --> </head> <body> <div class="container"> <div class="todo-container"> <div class="header"> <h2>Todo List</h2> <div class="todo-input"> <div class="controls"> <input type="text" placeholder="Enter to save" class="todo-input-text" autofocus> </div> </div> </div> <div class="content"> <div class="todo-item-list todo-undone-list clearfix"> <p>Things to do:</p> </div> <div class="todo-item-list todo-done-list clearfix"> <p>Done Things:</p> </div> </div> <div class="footer"> </div> </div> </div> <script type="text/template" id="todo-input-template"> </script> <script type="text/template" id="todo-item-template"> <span class="order"><%= order%></span> <a href="javascript:void(0);" class="done-<%= done%>"> <b><%= title%></b> <button title="删除" class="btn btn-mini pull-right todo-item-remove"><i class="icon-remove"></i></button> <% if (done) { %> <button title="撤销" class="btn btn-mini pull-right todo-item-undone"><i class="icon-repeat"></i></button> <% } else { %> <button title="完成" class="btn btn-mini pull-right todo-item-done"><i class="icon-ok"></i></button> <% } %> </a> </script> <!--[if lt IE 7]> <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> <![endif]--> <!-- build:js scripts/main.js --> <script data-main="scripts/main" src="bower_components/requirejs/require.js"></script> <!-- endbuild --> </body> </html>
main.coffee
require.config baseUrl : './scripts/' shim : underscore : exports : '_' backbone : deps : [ 'underscore' 'jquery' ] exports : 'Backbone' backboneLocalStorage : deps : [ 'backbone' ] app : deps : [ 'underscore' 'jquery' 'backbone' ] paths : jquery : '../bower_components/jquery/jquery' underscore : '../bower_components/underscore/underscore' backbone : '../bower_components/backbone/backbone' backboneLocalStorage: '../bower_components/backbone/examples/backbone.localStorage' require ['app'], (app) -> app.init()
app.coffee
define 'app', ['jquery', 'underscore', 'backbone', 'backboneLocalStorage'], ($, _, Backbone) -> TodoModel = Backbone.Model.extend defaults : () -> title : 'Untitle', done : false, order : Todos.length+1 initialize : () -> this.save() TodoList = Backbone.Collection.extend model : TodoModel localStorage : new Backbone.LocalStorage 'todos-backbone' done : () -> this.where done : true Todos = new TodoList # todo 集合 TodoView = Backbone.View.extend tagName : 'div' # 外容器 template : _.template $('#todo-item-template').html() # 模板HTML # 初始化,坚听对象 initialize : () -> this.listenTo this.model, 'change', this.render this.listenTo this.model, 'destroy', this.remove # 事件绑定 events : 'click button.todo-item-done' : 'done' 'click button.todo-item-remove' : 'clear' 'click button.todo-item-undone' : 'undone' done : () -> if this.model.get('done') == false # 本身是未完成状态的 this.model.set done : true this.remove() undone : () -> if this.model.get('done') == true # 本身是完成状态的 this.model.set done : false this.remove() clear : () -> this.model.destroy() render : () -> this.$el.html this.template this.model.toJSON() return this AppView = Backbone.View.extend # 初始化保存DOM对象 initialize : () -> this.$input = this.$('.todo-input-text').focus() this.$todoList = this.$('.todo-undone-list') this.$todoDoneList = this.$('.todo-done-list') this.listenTo Todos, 'add', this.addOne this.listenTo Todos, 'change:done', this.addOne Todos.fetch() events : 'keypress input.todo-input-text' : 'createOnEnter' # Enter 时保存 createOnEnter : (e) -> if e.keyCode != 13 return if !this.$input.val() return; Todos.create title: this.$input.val() this.$input.val('') addOne : (todo) -> view = new TodoView model : todo if todo.get('done') # 已经完成的加入已完成列表 this.$todoDoneList.append(view.render().el); else # 未完成的加入未完成列表 this.$todoList.append(view.render().el); # Todos.each (todo) -> todo.save() App = new AppView el : $('.todo-container') # 主应用UI return init : () -> Backbone.history.start()
main.css
.todo-container { margin: 50px auto 0 auto; width: 300px; } .todo-item-list { margin-top: 20px; } .todo-item-list > div { float: left; width: 90%; margin-top: 10px; padding-left: 5%; } .todo-item-list > div a:hover { text-decoration: none; } .todo-item-list > div button { margin: 0 3px; } .todo-item-list > div span.order { margin-right: 10px; color: #B6B6B6; font-style: italic; } .todo-item-list > p { font-weight: bold; margin-top: 1em; }
效果图
补充:
这里用的是 coffeescript,yeoman会自动转成js。关于todo-list,可以上官网参考下,我这里简化了部分代码。
Yeoman 学习笔记的更多相关文章
-
js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
-
PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
-
PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
-
2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
-
JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
-
seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
-
CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
-
HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
-
DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
-
XML CDATA节点
术语CDATA指字符数据.CDATA定义为文本块,但识别为标记. 预定义实体的同位素;,密度,并且与放大器;需要打字并且通常难以阅读的标记.在这种情况下,CDATA部分都可以使用.通过使用CDATA节 ...
-
asp.net 中给gridview添加自动序号
第一种方式,直接在Aspx页面GridView模板列中.这种的缺点是到第二页分页时又重新开始了. 代码如下: <asp:TemplateField HeaderText="序号&quo ...
-
MATLAB函数表(转自:http://bbs.06climate.com/forum.php?mod=viewthread&;tid=16041&;extra=page%3D4)
MATLAB函数表 4.1.1特殊变量与常数 ans 计算结果的变量名 computer 确定运行的计算机 eps 浮点相对精度 Inf 无穷大 I 虚数单位 inputname 输入参数名 NaN ...
-
全面解读JavaScript入门到进阶,100%基础知识掌握!
一.JavaScript 简介 1.JavaScript 是 Web 的编程语言,是前端开发必须掌握的三门语言之一,即: HTML 定义了网页的内容 CSS 描述了网页的布局 JavaS ...
-
打造MacOS版“XShell”
1.背景 XShell作为一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议.作为server端开发,几乎是必备工具了. 很多刚 ...
-
C++三目运算符的增强
<p>// 在C语言中表达式的结果放在寄存器中 // 在C语言中,表达式的返回值是变量的值 // 在C++中,表达式返回的是变量的本身</p><pre name=&quo ...
-
读取磁盘:CHS方式
读取磁盘:CHS方式 BIOS读取磁盘 读取磁盘也是调用BIOS: 中断命令: INT 13H 读取扇区的入口参数为 AH = 02H 功能参数,读取扇区 AL = 扇区数 CH = 柱面 CL = ...
-
protobuf编译.proto文档
1:在同一目录下按键盘shift+鼠标右键-->点击-->在此处打开命令窗口,打开后如下图所示 2.该目录下有person.proto文档,可以自己编写,如下 syntax = " ...
-
Nodejs学习笔记(十七)—浮点运算decimal.js
前言 开发过程中免不了有浮点运算,JavaScript浮点运算的精度问题会带来一些困扰 JavaScript 只有一种数字类型 ( Number ) JavaScript采用 IEEE 754 标准双 ...
-
如何让iOS模拟器也能测试蓝牙4.0程序?
买一个CSR蓝牙4.0 USB适配器,插在Mac上 在终端输入sudo nvram bluetoothHostControllerSwitchBehavior="never" 重启 ...