第十二章 浏览器嗅觉
12.1 User-Agent 检测
最早的浏览器嗅觉即用户代理(User-Agent)检测,
12.2 特性检测
特性检测不依赖于浏览器
例如:
if(document.getElementById){
// 做些什么
}
例:
function setAnimation (callback) {
if (window.requestAnimationFrame) { //标准
return requestAnimationFrame(callback);
} else if (window.mozRequestAnimationFrame) { //firefox
return mozRequestAnimationFrame(callback);
} else if (window.webkitRequestAnimationFrame) {
return webkitRequestAnimationFrame(callback);
} else if (window.oRequestAnimationFrame) {
return oRequestAnimationFrame(callback);
} else if (window.msRequestAnimationFrame) {
return msRequestAnimationFrame(callback);
} else {
return setTimeout(callback,0);
}
}
12.3 避免特性推断
特性检测只推断出当前的特性是否可用,并没有附加其他额外信息
12.4 避免浏览器推断
通过特性检测从而推断出是某个浏览器 是很糟糕的做法,这叫做 浏览器推断,是一种错误的实践
12.5 应当如何取舍
尽可能的使用特性检测
自动化
第十三章 文件和目录结构
13.1 最佳实践
*一个文件只包含一个对象
*相关的文件用目录分组
*保持第三方代码的独立
*确定创建的位置
13.2 基本结构
javascript目录下方放置如下三个主要的目录是当下流行的做法
*build
用来放置最终构建后的文件,理想情况下这个目录不应该提交
*src
用来放置所有的原文件,包括用来进行文件分组的子目录
*test 或者 tests
用来放置所有的测试文件,于src目录一一对应
// 另外
*release
始终包含最新的稳定发行版本
src目录下每个子目录都代表一个单独的YUI模块
*docs
文档目录
*js
JavaScript源文件目录
*meta
用于存放模块元信息
*teste
用于存放模块的测试代码
第十四章 Ant
Ant构建工具,最初为java项目而量身定做
14.1 安装
运行Ant需要java环境。
参照 http://ant.apache.org/manual/install.html
14.2 配置文件
Ant的主要配置文件是build.xml .build.xml 用来告诉Ant如何执行构建过程,Ant构建系统有3个基本组成部分
*任务
任务是构建过程中的一个步骤,比如执行一个程序或者复制一个文件
*目标
一组有序任务的集合
*项目
所有目标的容器
构建系统的每个部分都有一个xml元素表示。build.xml文件示例如下
<project name="maintainablejs" default="hello">
<target name="hello">
<echo>Hello world!</echo>
</target>
</project>
14.3 执行构建
14.4 目标操作的依赖
<project name="maintainablejs" default="hello">
<target name="hello">
<echo>Hello world!</echo>
</target>
<target name="goodbye" depends="hello">
<echo>Goodbye!</echo>
</target>
</project>
目标goodbye依赖于hello,因此输入ant goodbye会输出以下结果:
hello:
[echo] Hello world!
goodbye:
[echo] Goodbye!
BUILD SUCCESSFUL
Total time: 0 seconds
14.5 属性
Ant中的属性类似于kavascript 中的变量,因为他们通常都包含数据,这些数据在执行脚本期间都可以被操作和改变。比如,<property>标签定义一个属性。
<project name="maintainablejs">
<property name="version" value="0.1.0"/>
</project>
每个<property>都需要指明name和value属性。定义后便可通过${version}来引用,比如:
<target name="hello">
<echo>Version is ${version}</echo>
</target>
当前执行这段Ant脚本时会输出:
[echo] Version is 0.1.0
属性也可以定义在外部的java属性中,并直接载入到Ant中。例如:
文件 -> build.properties
version = 0.1.0
copyright = Copyright 2019 Nichlias C. Zakas. All right reserved.
可以使用<loadproperties>元素通过srcfile属性指明文件路径来把上述特性导入到Ant脚本中
<project name="maintainablejs" default="version">
<loadproperties srcfile="build.properties" />
<target name="version">
<echo>Version is ${version}</echo>
</target>
</project>
对于需要定义大量的属性或者需要在多个Ant脚之间公用的属性而言,最好把它们放在一个独立的java属性文件中
最好至少声明几个用于整个项目的属性,例如:
src.dir
源代码目录的根目录
build.dir
放置最终构建后文件的路劲
lib.dir
依赖文件的路径
14.6 Buildr项目
Buildr是一个寻找和收集前端相关且语法简单的Ant任务的开源项目。Buildr 囊括了所有这些可能在你的Ant脚本中使用到的各种工具,把它们封装成了任务
在使用之前,你首先必须获取一份源代码,只要在你的电脑上有这个目录结构,你就可以用这条命令导入所有的任务
<inport file="/path/to/buildr/buildr.xml" />
通过这条命令可以在你的build.xml文件中使用所有的Builedr中定义的自定义任务。