ref:
项目地址:
构建web app的时候,将不同的功能分模块,并在物理上分开写在各自的文件里,有利于理解。而web app有一个原则,就是减少HTTP请求,需要将分散的文件合并为一个文件(同时也是解决依赖问题,不用在html文件中引入所有的js文件),但是这又给调试带来不便。这两个互为矛盾的观点,可以使用build tool来同时实现。
本文介绍的是ember.js官方使用的基于Ruby的rake-pipeline工具。
//@ sourceURL的调试器标记
首先介绍一种可以被Webkit调试器或者Firebug识别的标记技术:
var globalEval = function(data) {
if ( data ) {
window[ "eval" ].call( window, data );
}
};
globalEval("window.alert('hello');\nwindow.alert('world');\n//@ sourceURL=hello.js");
eval执行的时候,通过@ sourceURL标记,会在调试器的source里看到一个hello.js,内容如下:
window.alert('hello');
window.alert('world');
//@ sourceURL=hello.js
注意,这个文件是调试器生成的,本地不需要有一个hello.js对应。你可以在这里设置断点来调试。
安装Ruby相关工具
安装Ruby(现在我用的是1.9.3)
构建Demo工程
checkout这个工程:https://github.com/emberjs/todos.git
然后按照README.md的说明一步步操作即可。这会帮助你构建rake-pipeline的依赖。
bundle机制是Ruby工程的一个包管理工具,具体的不清楚。在执行bundle install后会生成Gemfile.lock的文件,记录当前的依赖的满足条件。(在版本管理系统中应该包含这个文件,这样在下次build的时候,就不会提示你要执行bundle install,而且每次修改Gemfile后都要重新执行bundle install)
一些hack
这段代码用于使用路由注入的方式定义App的路由:
路由的名字需要符合以下规则:$.*$