SeaJS 里版本号和时间戳管理的最佳实践
2013-03-22 14:45 sniper007 阅读(753) 评论(0) 收藏 举报用 seajs 组织项目,上线后,经常需要更新特定文件或所有文件的时间戳,以清空浏览器缓存。最简单的方式是:
| 
 1 
2 
3 
 | 
define(function(require, exports) {  var a = require('path/to/a.js?20110801');}); | 
这种方式很简单直观,弊端也很明显:文件一多,时间戳会分散在各个文件,维护起来不方便。
第二种方式是利用 alias:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
 | 
seajs.config({  alias: {    'jquery': 'jquery/1.6.2/jquery',    'backbone': 'backbone/0.5.1/backbone',    'a': 'a.js?20110801',    'b': 'b.js?20110801'  }}); | 
这种方式用来维护 jquery 等类库模块的版本号是非常方便的。但用来加时间戳,文件一多时,依旧不方便。
第三种方式是利用 map:
| 
 1 
2 
3 
4 
5 
 | 
seajs.config({  'map': [    [ /^(.*\.(?:css|js))(.*)$/i, '$1?20110801' ]  ]}); | 
这种方式,用来批量更新时间戳是最方便的。
最佳实践
假设文件存放路径如下:
为了方便版本和时间戳管理,建议配置如下:
config.js:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
 | 
seajs.config({  alias: {    'jquery': 'jquery/1.6.2/jquery',    'backbone': 'backbone/0.5.1/backbone'  },  map: [    [ /^(.*\/app\/xxx\/.*\.(?:css|js))(?:.*)$/i, '$1?20110802' ]  ]}); | 
这样配置好后,在具体模块代码里,就不再需要考虑时间戳了:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
 | 
define(function(require, exports) {  var $ = require('jquery');  var BB = require('backbone');  var a = require('./a');  var b = require('./b');  require('./c.css');  // ...}); | 
                    
                
                
            
        
浙公网安备 33010602011771号