亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

seajs中模塊的解析規則詳解和模塊使用總結

2019-11-20 20:57:08
字體:
來源:轉載
供稿:網友

seajs github 模塊標識已經說的相對清楚了。但并沒有面面俱到,特別是當你需要手寫 【模塊ID】和【模塊依賴】的時候,或者自己寫自動化工具來做 transport 的時候(ps:spm貌似適應性不是很強也不易用,畢竟每個項目的目錄結構可能相差很大,且不易改變。當然如果他的定位是包管理工具就別指望它來做你的項目的自動化構建工具了),ID的解析規則就需要了解透徹了。
注意事項:
1. 頂級標識始終相對 base 基礎路徑解析。
2. 絕對路徑和根路徑始終相對當前頁面解析。
3. require 和 require.async 中的相對路徑相對當前模塊路徑來解析。
4. seajs.use 中的相對路徑始終相對當前頁面來解析。

seajs中,模塊的ID大致可分為三種:【相對標識】、【頂級標識】、【普通路徑】,
普通路徑包括 “絕對路徑”、“根路徑”,等。

這里重點說明 【相對標識】 和 【頂級標識】。
相對標識 是指 "./","../" 開頭的,如:"./OtherModule", "../lib/Base"。
頂級標識 是指 以文件或目錄(可以包含:字母、-、_)開頭的,如:"app/widget/Select"

需要寫模塊ID的地方有三處:

復制代碼 代碼如下:
define("id (1)",["../id2 (2)"], function(require, exports, module){
    var moduleA = require('./moduleA (3)');
})

注意:無論是define第一個參數【模塊ID】還是第二個參數【依賴模塊的ID】還是【require模塊ID】,最終的比對標準是【解析后的文件URI】。
因此,這三處需要寫ID 的地方可以以任意一種方式來寫,只要最終解析為同一個URI,即被認為是同一個模塊。
在解析ID的過程中,會預先經過 seajs.config 中定義的 alias 和 paths 的處理。

base 路徑解析規則
(第 1 層,本身的路徑不依賴于任何設置)
1. 不可使用【頂級標識】,因為頂級標識就是相對于 base 基礎路徑來解析的,因此 base 本身只能使用【相對標識】或【根路徑】等。
2. base 默認路徑為 seajs 的目錄,其他情況參見seajs官網,如果不是seajs推薦的源碼目錄結構,盡量手動設置 base 路徑。
3. 【相對標識】:相對于 當前頁面 解析。
paths 中路徑解析規則
(第 1 層,本身的路徑不依賴于任何設置)
1. 【相對標識】:在哪里被引用,相對的解析位置視被引用的地方而定,遵循當地的規則。
2. paths中的字段會被以變量的方式在被使用的地方替換,然后再解析。
比如:

復制代碼 代碼如下:
//代碼塊(1)
//path定義:
seajs.config({
    base:"./app/src",
    path:{
        "a":"../lib", //(1) 相對路徑
        "lib":"path/to/lib", //(2) 頂級標識
        "l2":"/lib" //(3) 根路徑
    }
});
//模塊 mod/m/m.js:
...
require("a/jquery");
//=> 轉換為:"../../lib/jquery"
//=> 加載:mod/lib/jquery (特別注意 1)
...
//模塊 mod/f.js:
...
require("a/jquery");
//=> 轉換為:"../../lib/jquery"
//=> 加載:lib/jquery (特別注意 2)
...

alias 中路徑解析規則
(第 2 層,本身的路徑可以依賴于paths的設置)
1. alias 的規則類似于 paths,并且 alias 路徑也可以使用 paths 中的“變量”
2. 提醒:paths、alias 中盡量使用【頂級標識】、【根路徑】、【絕對路徑】,不要使用【相對標識】,因為在不同深度的模塊引用時會解析為不同的路徑。
3. 【相對標識】:在哪里被引用,相對的解析位置視被引用的地方而定,遵循當地的規則。
seajs.use 路徑解析規則
【相對標識】:相對于 當前頁面 解析。
define 定義模塊 ID 解析規則 (1)

(第 3 層,路徑可以相對于 alias 或 paths 來設置)
可以使用:【相對標識】、【頂級標識】、【根路徑】
推薦使用【頂級標識】,如果模塊的位置不在 base 基礎路徑內,則使用【相對標識】或【根路徑】。
【相對標識】:相對 當前頁面 解析

復制代碼 代碼如下:
// 代碼塊(2)
//config -- 還使用 [代碼塊 (1)]中的配置

// 模塊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 基礎路徑解析

復制代碼 代碼如下:
//代碼塊(3)
//config -- 還使用 [代碼塊 (1)]中的配置

//無歧義,相對于根路徑解析
define("..", ["/app/src/module/Base"], ..)
// 無歧義,頂級標識,相對于 base 基礎路徑解析
define("..", ["app/src/module/Base"], ..)
//有歧義,相對標識,此處相對于 當前模塊 來解析
//此處的依賴看起來是依賴于【代碼塊(2)】中的 `模塊3`
//但如果當前模塊跟當前頁面不在同一層目錄下,就不會被解析為 `模塊3`


define("..", ["./app/src/module/Base"],..)
模塊內 require 其他模塊的ID 解析規則 (3)
(第 3 層,路徑可以相對于 alias 或 paths 來設置)
【相對標識】:相對 base 基礎路徑解析

復制代碼 代碼如下:
//代碼塊(4)
//config -- 還使用 [代碼塊 (1)]中的配置

define("..", [..], function(require){
    //無歧義,相對于根路徑解析
    require("/app/src/module/Base");
});

define("..", [..], function(require){
    // 無歧義,頂級標識,相對于 base 基礎路徑解析
    require("app/src/module/Base");
});

define("..", [..], function(require){
    //有歧義,相對標識,此處相對于 當前模塊 來解析
    //此處的依賴看起來是依賴于【代碼塊(2)】中的 `模塊3`
    //但如果當前模塊跟當前頁面不在同一層目錄下,就不會被解析為 `模塊3`
    require("./app/src/module/Base");
})


特別提醒:模塊內三處需要寫ID的地方,不需要使用看起來相同的字符串,只要被解析為相同的模塊即可。

總結:
1.paths 和 alias 的設置僅僅相當于一個變量,在哪里使用,就在那里替換為設定的值,然后再解析。
2.盡可能的使用【頂級標識】。
3.如果不能使用【頂級標識】,比如目錄跨越比較大等,則盡量設置 alias 或 paths 通過一個【非相對路徑】 標識 定位到一個目錄,然后在這個標識下,再定義ID。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美中文字幕在线播放| 欧美精品激情在线观看| 亚洲人成五月天| 久久成人在线视频| 久久久亚洲国产| 精品国产91久久久久久| 亚洲精品日韩欧美| 亚洲加勒比久久88色综合| 亚洲精品网站在线播放gif| 伊人伊成久久人综合网小说| 色综合五月天导航| 国产精品黄色影片导航在线观看| 日本精品中文字幕| 亚洲成人久久一区| 成人午夜小视频| 亚洲a成v人在线观看| 欧美视频第一页| 国产精品69久久久久| 国产成人一区二区在线| 国产精品999| 日韩中文字幕免费看| 国产精品高潮视频| 久久99久久99精品中文字幕| 午夜伦理精品一区| 亚洲国产欧美一区二区三区同亚洲| 欧美一级高清免费播放| 国产精品第七十二页| 日韩精品在线免费| 欧美影院久久久| 国产成人福利视频| 精品在线欧美视频| 黄网动漫久久久| 成人动漫网站在线观看| 欧美成在线观看| 一道本无吗dⅴd在线播放一区| 欧美丰满老妇厨房牲生活| 亚洲伊人一本大道中文字幕| 欧美一区二区色| 亚洲欧洲日产国码av系列天堂| 国产精品久久久久久久一区探花| 日韩在线精品视频| 91日韩在线视频| 国产日本欧美一区二区三区在线| 久久久精品久久久久| 国产亚洲一区精品| 国产一区二区三区三区在线观看| 日韩av黄色在线观看| 欧美在线视频免费| 国外成人在线视频| 欧美午夜片欧美片在线观看| 麻豆精品精华液| 亚洲一区二区自拍| 日韩福利在线播放| 永久免费看mv网站入口亚洲| 欧美在线一级va免费观看| 欧美大学生性色视频| 亚洲一区999| 91地址最新发布| 性欧美亚洲xxxx乳在线观看| 国产精品一区二区久久精品| 国产a∨精品一区二区三区不卡| 亚洲国产成人久久综合一区| 国产精品第一视频| www国产精品com| 日韩在线观看免费全| 成人啪啪免费看| 中文字幕在线看视频国产欧美| 亚洲在线视频观看| 中文字幕免费精品一区| 亚洲人成网在线播放| 亚洲第一av网| 精品色蜜蜜精品视频在线观看| 久久99国产精品久久久久久久久| 国产成人精品视频在线观看| 一本色道久久综合狠狠躁篇怎么玩| 国产在线高清精品| 日本韩国在线不卡| 欧美性极品少妇精品网站| 亚洲精品欧美极品| 国产亚洲成精品久久| 亚洲欧美国产日韩中文字幕| 一区二区三区 在线观看视| 欧美日本高清一区| 国产精品美女久久久久av超清| 亚洲精品资源在线| 欧美在线亚洲一区| 久久精品成人欧美大片| 欧美日韩一区二区在线播放| 国产视频欧美视频| 国产精品视频久久久| 亚洲四色影视在线观看| 国产91色在线|免| 亚洲视频777| 在线色欧美三级视频| 成人黄色片网站| 国产精品视频久久久久| 最近2019年中文视频免费在线观看| 亚洲自拍偷拍在线| 欧美激情亚洲精品| 日韩午夜在线视频| 亚洲欧美日韩中文在线制服| 精品调教chinesegay| 欧美性xxxxhd| 日韩中文字幕在线播放| 日韩欧美一区二区三区| 中文字幕欧美亚洲| 日韩精品在线私人| 91久热免费在线视频| 精品国产区一区二区三区在线观看| 精品国产乱码久久久久久虫虫漫画| 欧美裸体视频网站| 久久久精品影院| 久久久www成人免费精品张筱雨| 国产一区二区激情| 国产精品久久久久久av下载红粉| 亚洲裸体xxxx| 日韩精品中文字幕有码专区| 亚洲新中文字幕| 日韩精品极品在线观看播放免费视频| 欧美性生活大片免费观看网址| 国产香蕉97碰碰久久人人| 久久69精品久久久久久国产越南| 456亚洲影院| 亚洲综合在线播放| 中文字幕精品久久久久| 亚洲一区美女视频在线观看免费| 97涩涩爰在线观看亚洲| 欧美综合在线观看| 亚洲va久久久噜噜噜久久天堂| 另类视频在线观看| 91免费综合在线| 正在播放欧美一区| 欧美性猛交xxx| 一本一本久久a久久精品综合小说| 国产精品欧美亚洲777777| 日韩精品中文字幕有码专区| 全亚洲最色的网站在线观看| 亚洲激情视频在线播放| 国产精品色视频| 国产精品久久在线观看| 欧美日韩亚洲一区二区三区| 亚洲欧美国产精品久久久久久久| 亚洲欧美日本另类| 欧美精品久久一区二区| 国产精品网站入口| 欧美性猛交丰臀xxxxx网站| 日韩精品中文字幕在线观看| 欧美精品免费在线观看| 91国自产精品中文字幕亚洲| 成人激情视频在线播放| 欧美尤物巨大精品爽| 亚洲三级 欧美三级| 欧美一区二区视频97| 91久久夜色精品国产网站| 国产精品成人久久久久| 欧美激情视频一区二区三区不卡| 国产va免费精品高清在线观看| 91精品国产99久久久久久| 人妖精品videosex性欧美| 日韩精品在线私人| 亚洲免费成人av电影| 日韩精品在线电影| 亚洲欧美中文另类| 日本a级片电影一区二区|