转: seajs手册与文档之 -- 模块标识
目錄
- 模塊標識
- 相對標識
- 頂級標識
- 普通路徑
- 文件后綴的提示
模塊標識
模塊標識是一個字符串,用來標識模塊。在 require、 require.async 等加載函數中,第一個參數都是模塊標識。define 函數的 dependencies 參數也是由模塊標識組成。
SeaJS 中的模塊標識是 CommonJS 模塊標識 的超集:
注意,符合上述規范的標識肯定是 SeaJS 的模塊標識,但 SeaJS 能識別的模塊標識不需要完全符合以上規范。 比如,除了大小寫字母組成的小駝峰字符串,SeaJS 的模塊標識字符串還可以包含下劃線和連字符, 甚至可以以 "http://"、"https://"、"file:///" 等協議標識開頭。
相對標識
相對標識只出現在模塊環境中,以 "." 開頭。會相對當前模塊的 URI 來解析:?
// 在 http://example.com/js/a.js 中: require('./b');// => http://example.com/js/b.js頂級標識
頂級標識不以點(".")或斜線("/")開始, 會相對 SeaJS 的 base 路徑來解析:
// 假設 base 路徑是:http://example.com/js/libs/// 在模塊代碼里: require('jquery/1.7.1/jquery');// => http://example.com/js/libs/jquery/1.7.1/jquery.jsbase 路徑的默認值,與 sea.js 的路徑相關:~~~感覺seajs的路徑解析機制比requirejs的簡單,以 " . " 開始的相對路徑是相對當前模塊URI的,其他相對路徑是相對 base路徑的
如果 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 路徑:
seajs.config({base: 'http://code.jquery.com/' });// 在模塊代碼里: require('jquery');// => http://code.jquery.com/jquery.js普通路徑
除了相對和頂級標識之外的標識都是普通路徑。普通路徑的解析規則,和 HTML 代碼中的 script.src 一樣,會相對當前頁面來解析。
// 在 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.jsseajs.use(ids, ...) 和 define(id, ...) 中的模塊標識始終是普通路徑,因為這兩個方法是在全局環境中執行的。
文件后綴的提示
除非在路徑中出現井號("#")或問號("?"),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總結
以上是生活随笔為你收集整理的转: seajs手册与文档之 -- 模块标识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DataUml Design 介绍8-D
- 下一篇: Seen.js – 使用 SVG 或者