4.资源定位
资源定位与模块标识相关,而在Sea.js中有三种模块标识:
普通路径:普通路径与网页中超链接一样,相对于当前页面解析。
相对标识:在define的factory中的相对路径(..
.
)是相对标识,相对标识相对当前的URI来解析
顶级标识:不以.
或者‘/‘开头的模块标识是顶级标识。
获取真实路径:在Sea.js中,使用data.cwd来代表当前页面的目录;使用data.base来代表sea.js的加载地址。
5.factory依赖分析
在Sea.js的API中,define(factory)
,并没有指明模块的依赖项,那Sea.js是如何获得的呢。
/** * util-deps.js - The parser for dependencies * ref: tests/research/parse-dependencies/test.html */ var REQUIRE_RE = /"(?:\\"|[^"])*"|‘(?:\\‘|[^‘])*‘|\/\*[\S\s]*?\*\/|\/(?:\\\/|[^\/\r\n])+\/(?=[^\/])|\/\/.*|\.\s*require|(?:^|[^$])\brequire\s*\(\s*(["‘])(.+?)\1\s*\)/g var SLASH_RE = /\\\\/g function parseDependencies(code) { var ret = [] code.replace(SLASH_RE, "") .replace(REQUIRE_RE, function(m, m1, m2) { if (m2) { ret.push(m2) } }) return ret }
Sea.js就是使用REQUIRE_RE
在factory的源码中匹配出该模块的依赖项。从REQUIRE_RE这么长的正则来看,这里坑很多;在CommonJS的wrapper方案中可以使用JS语法分析器来获取依赖会更准确。
文章源自 设计联盟 www.DesignLinks.cn 中国最具影响力的创意设计综合网站