轉: seajs手冊與文檔之 -- 模塊標識

模塊標識

模塊標識是一個字符串,用來標識模塊。在 requirerequire.async 等加載函數中,第一個參數都是模塊標識。define 函數的 dependencies 參數也是由模塊標識組成。css

SeaJS 中的模塊標識是 CommonJS 模塊標識 的超集:html

  1. 一個模塊標識由斜線("/")分隔的多項組成。
  2. 每一項必須是小駝峯字符串、"."".."
  3. 模塊標識能夠不包含文件後綴名,好比 ".js"
  4. 模塊標識能夠是「相對」或「頂級」標識。若是第一項是 ".""..",則該模塊標識是相對標識
  5. 頂級標識根據模塊命名空間的根路徑來解析。 ~~相對base路徑?
  6. 相對標識相對 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
相關文章
相關標籤/搜索