`resolvename` error
houkanshan opened this issue · comments
exports.resolvename('http://img3.douban.com/aaa/bbb/../../ccc')
=> "http:/img3.douban.com/ccc"
.replace(/\/\//g, '/')
这里需要考虑下 http://
的情况?
这个应该用栈来做比较清晰
需要说明一下:如果正确使用ozma,本来是不会触发到这个bug的,比如下面这种情况会遇到这个bug:
<!-- index.html -->
<script src="http://CDN_URL/setup.js"></script>
<script>
define('lib/a', 'http://CDN_URL/lib/a.js');
</script>
// setup.js
require([], function(){
require(['lib/a'], function(a){
// ..
});
});
// http://CDN_URL/lib/a.js
define(function(require){
var b = require('../b');
// ....
});
// http://CDN_URL/b.js
define(function(require){
// ....
});
setup.js 执行的时候,请求模块"lib/a"的CDN地址,"lib/a"执行的时候,又去请求模块"b"相对于"lib/a"的CDN地址的URL,这种情况下 resolvename 会收到带 http:// 的参数
但如果正确用 ozma 的话,http://CDN_URL/lib/a.js 的代码会是这样:
// http://CDN_URL/lib/a.js
define('b', [], function(require){
// ....
});
define('lib/a', ['b'], function(_oz1, require){
var b = require('b');
// ....
});
既不会为模块b生成CDN文件,也不会去请求这个文件…