seajs github 模組標識已經說的相對清楚了。但並沒有面面俱到,特別是當你需要手寫【模組ID】和【模組依賴】的時候,或者自己寫自動化工具來做transport 的時候(ps:spm貌似適應性不是很強也不易用,畢竟每個專案的目錄結構可能相差很大,且不易改變。
注意事項:
1. 頂層標識始終相對 base 基礎路徑解析。
2. 絕對路徑和根路徑總是相對當前頁面解析。
3. require 和 require.async 中的相對路徑相對當前模組路徑來解析。
4. seajs.use 中的相對路徑總是相對當前頁面來解析。
seajs中,模組的ID大致可分為三種:【相對標識】、【頂級標識】、【普通路徑】,
普通路徑包括 “絕對路徑”、“根路徑”,等。
這裡重點說明 【相對標識】 和 【頂層標識】。
相對標識 是指 "./","../" 開頭的,如:"./OtherModule", "../lib/Base"。
頂層標識 是指 以檔案或目錄(可以包含:字母、-、_)開頭的,如:"app/widget/Select"
需要寫模組ID的地方有三個:
base 路徑解析規則
(第1 層,本身的路徑不依賴任何設定)
1. 不可使用【頂層識別】,因為頂層標識就是相對於base 基礎路徑來解析的,因此base 本身只能使用【相對標識】或【根路徑】等。
2. base 預設路徑為 seajs 的目錄,其他情況請參考seajs官網,如果不是seajs建議的源碼目錄結構,盡量手動設定 base 路徑。
3. 【相對標識】:相對於 目前頁面 解析。
paths 中路徑解析規則
(第1 層,本身的路徑不依賴任何設定)
1. 【相對標識】:在哪裡被引用,相對的解析位置視被引用的地方而定,遵循當地的規則。
2. paths中的欄位會被以變數的方式在被使用的地方替換,然後再解析。
例如:
(第3 層,路徑可以相對於alias 或paths 來設定)
可以使用:【相對標識】、【頂級標識】、【根路徑】
建議使用【頂級標識】,如果模組的位置不在base 基礎路徑內,則使用【相對標識】或【根路徑】。
【相對識別】:相對目前頁面解析
// 模組1,無歧義,根路徑解析
define("/app/src/module/Base", ..);
// 模組2,無歧義,頂級標識,相對於base 基礎路徑來解析
define("app/src/module/Base", ..);
// 模組3,有歧義,相對標識,此處相對於當前頁面(引用到這個模組的html頁)
// 但其他地方即便使用【表面上相同的「ID」】,也可能會被解析不同的模組
define("./app/src/module/Base",.. );
模組依賴ID 解析規則 (2)
(第3 層,路徑可以相對於alias 或paths 來設定)
【相對識別】:相對base 基礎路徑解析
複製程式碼
複製程式碼
複製程式碼
複製程式碼
define("..", ["/app/src/module/Base"], ..)
【相對標識】:相對base 基礎路徑解析
複製程式碼
程式碼如下:
//程式碼區塊(4)
//config --也使用[程式碼區塊(1)]中的配置
});
define("..", [..], function(require){
// 無歧義,頂級標識,相對於base 基礎路徑解析
require("app/src/module/Base ");
});