模塊標識是一個字符串,用來標識模塊。在 require
、 require.async
等加載函數中,第一個參數都是模塊標識。define
函數的 dependencies
參數也是由模塊標識組成。css
SeaJS 中的模塊標識是 CommonJS 模塊標識 的超集:html
- 一個模塊標識由斜線(
"/"
)分隔的多項組成。- 每一項必須是小駝峯字符串、
"."
或".."
。- 模塊標識能夠不包含文件後綴名,好比
".js"
。- 模塊標識能夠是「相對」或「頂級」標識。若是第一項是
"."
或".."
,則該模塊標識是相對標識。- 頂級標識根據模塊命名空間的根路徑來解析。 ~~相對base路徑?
- 相對標識相對
require
所在模塊的標識來解析。 ~~相對當前模塊的URI?
注意,符合上述規範的標識確定是 SeaJS 的模塊標識,但 SeaJS 能識別的模塊標識不須要徹底符合以上規範。 好比,除了大小寫字母組成的小駝峯字符串,SeaJS 的模塊標識字符串還能夠包含下劃線和連字符, 甚至能夠以 "http://"
、"https://"
、"file:///"
等協議標識開頭。jquery
相對標識只出如今模塊環境中,以 "."
開頭。會相對當前模塊的 URI 來解析: json
// 在 http://example.com/js/a.js 中: require('./b'); // => http://example.com/js/b.js
頂級標識不以點("."
)或斜線("/"
)開始, 會相對 SeaJS 的 base
路徑來解析:async
// 假設 base 路徑是:http://example.com/js/libs/ // 在模塊代碼裏: require('jquery/1.7.1/jquery'); // => http://example.com/js/libs/jquery/1.7.1/jquery.js
base
路徑的默認值,與 sea.js
的路徑相關:~~~感受seajs的路徑解析機制比requirejs的簡單,以 " . " 開始的相對路徑是相對當前模塊URI的,其餘相對路徑是相對 base路徑的ide
若是 sea.js 的路徑是:
http://example.com/js/libs/sea.js ~~~base路徑默認爲sea.js的URI
則 base 路徑爲:
http://example.com/js/libs/
當 sea.js
路徑中含有版本號時,base
不會包含 seajs/x.y.z
字串。 當類庫模塊有多個版本時,這樣會更方便。函數
若是 sea.js 的路徑是: http://example.com/libs/seajs/1.0.0/sea.js 則 base 路徑是: http://example.com/libs/
固然,也能夠手工配置 base
路徑:requirejs
seajs.config({
base: 'http://code.jquery.com/'
});
// 在模塊代碼裏:
require('jquery');
// => http://code.jquery.com/jquery.js
除了相對和頂級標識以外的標識都是普通路徑。普通路徑的解析規則,和 HTML 代碼中的 script.src
同樣,會相對當前頁面來解析。ui
// 在 http://example.com/js/main.js 中:
require('http://example.com/js/a');
// => http://example.com/js/a.js
// 在 http://example.com/js/a.js 中:
require('/js/b');
// => http://example.com/js/b.js
// 在任何代碼裏:
seajs.use('./c'); //~~~seajs.use的模塊標識 老是相對包含seajs頁面的路徑
// => http://example.com/path/to/page/c.js
seajs.use(ids, ...)
和 define(id, ...)
中的模塊標識始終是普通路徑,由於這兩個方法是在全局環境中執行的。spa
除非在路徑中出現井號("#"
)或問號("?"
),SeaJS 在解析模塊標識時, 都會自動添加 JS 擴展名(".js"
)。若是不想自動添加擴展名,最簡單的方法是, 在路徑末尾加上井號("#"
)。
// ".js" 後綴能夠省略: require('http://example.com/js/a'); require('http://example.com/js/a.js'); // => http://example.com/js/a.js // ".css" 後綴不可省略: ~~~seajs能夠直接加載css文件,requirejs加載css文件須要插件require-css require('http://example.com/css/a.css'); // => http://example.com/css/a.css // 當路徑中有問號("?")時,不會自動添加後綴: require('http://example.com/js/a.json?callback=define'); // => http://example.com/js/a.json?callback=define // 當路徑以井號("#")結尾時,不會自動添加後綴,且會在解析時,去掉井號: require('http://example.com/js/a.json#'); // => http://example.com/js/a.json