dexteryy / OzJS

A microkernel for modular javascript, a toolchain for modern front-end, a micro-framework for growable WebApp

Home Page:http://ozjs.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

`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文件,也不会去请求这个文件…