fex-team / fis3

FIS3
http://fis.baidu.com
BSD 2-Clause "Simplified" License
2.79k stars 694 forks source link

modjs异步加载生成resourceMap与__RESOURCE_MAP__内容不一致问题 #412

Open fychinesepjj126 opened 8 years ago

fychinesepjj126 commented 8 years ago

mod.js异步加载生成的resourceMap与页面中RESOURCE_MAP关键字生成内容不一致, 主要体现在resourceMap中使用url关键字,而RESOURCE_MAP中使用uri关键字, 相同的内容表示为什么要使用两种表示方式,而且这两种表示方式不容易区分,容易在使用中产生各种坑!建议把两种表示统一表示为url。

loader: mod.js 加载方式: amd 调用语法:

require(['test.jade'], function(test){
        console.log(test({'name': 'abc'}));
 });

异步加载,页面生成:

/*resourcemap*/
require.resourceMap({
  "res": {
    "test.jade": {
      "url": "/static/jade/test.js",  //url表示
      "type": "js"
    }
  },
  "pkg": {}
});
   var t = __RESOURCE_MAP__;  // 页面内嵌source生成内容
    var t = {
    "res": {
        "static/js/mod.js": {
            "uri": "/static/js/mod.js",   //uri 表示
            "type": "js"
        },
        "static/js/runtime.js": {
            "uri": "/static/js/runtime.js",
            "type": "js",
            "deps": [
                "fs"
            ]
        },
        "static/js/jade.min.js": {
            "uri": "/static/js/jade.min.js",
            "type": "js"
        },
        "test.jade": {
            "uri": "/static/jade/test.js",
            "type": "js"
        }
    },
    "pkg": {}
};
2betop commented 8 years ago

这个已经不能随便改了,毕竟已经发布了这么久了,改的话影响可能会比较大。跟后端结合的几个框架也是这个格式。

不过如果你自己写 loader 要做个兼容的话,还是比较简单的。 读取 url 的时候,item.uri || item.url 读取的时候二选一就行了,其实两个表最大的区别是,一个是所有资源,一个只有异步资源。

fychinesepjj commented 8 years ago

恩,你说的也是,这个是历史原因不能更改,不过还是建议在帮助文档里能注明下,这样会让很多新手少走一些弯路!