Seajs -- 路徑

關於路徑

分爲 相對 與 頂級 標識。以...開頭,則爲相對標識 。以小駝峯字符串開關,則爲頂級標識。javascript

// 假設 base 路徑是:http://example.com/assets/

// 在模塊代碼裏:
require.resolve('gallery/jquery/1.9.1/jquery');
  // => http://example.com/assets/gallery/jquery/1.9.1/jquery.js

Seajs除了相對與頂級標識以外,還可使用普通路徑來加載模塊。java

就到當前頁面的腳本分析(能夠右鍵查看源碼)jquery

//sea.js的路徑,即 base 路徑,相對於當前頁面
<script src="http://yslove.net/actjs/assets/sea-modules/seajs/2.1.1/sj.js"></script>

<script type="text/javascript">
//配置Seajs
seajs.config({
    alias: {
        //頂級標識,基於 base 路徑
        'actjs': 'actjs/core/0.0.7/core.js',
            // => http://
        'position': 'actjs/util/0.0.2/position.js'
    }
});

seajs.config({
    alias: {
        //普通路徑,相對於當前頁面
        'affix': '../../actjs/assets/widget/src/widget-affix.js',

        //相對標識,相對於當前頁面
        'init': './src/init.js'
    }
});
</script>

開始的時候會以爲Seajs的路徑有點不習慣,由其是Base路徑。切記Base路徑就是sea.js的那個文件的上級路徑,而後全部頂級標識,相對標識都是相對於這個Base來調整。ui

 

 

任何一個模塊的運行都涉及到兩個步驟:模塊定義 和 模塊執行,上面的代碼兩個步驟都包括在內。而使用了 Sea.js ,咱們不但願用戶去手動寫 script 標籤引用模塊。但願只須要 seajs.use 模塊的文件路徑便可(入口惟一):spa

seajs.use('path/to/module', function(Module) {
    // Module
});

Sea.js 會自動插入 script 標籤,完成定義步驟,而後執行模塊,拿到模塊的輸出。因此當一個文件裏有多個 define 時,只能用 ID 是否匹配 use 中的路徑來判斷是否主模塊。.net

固然能夠迴避掉這個原則,你只須要本身負責模塊的定義部分,再本身 seajs.use 以前定義好的模塊 ID 就行。code

<!-- 各類模塊的定義 define define define -->
<script src="http://example.com/modules.js"></script>

<script>
// 這時 use 的第一個參數就能夠沒必要是文件路徑了,由於已經有定義好的模塊 ID 了
seajs.use('jquery', function($) {
    // $
});
</script>

或者經過 alias 來幫助 ID 匹配上最終的路徑,這樣就和 RequireJS 的方案基本一致了。ip

// lib/jquery-1.7.2.js 的內容以下
define('$', funtion(require, exports, module) {
  // jQuery
});

這樣就不須要本身去引用上面的文件,能夠直接經過 seajs.use 調用。字符串

seajs.config({
  alias: {
    $: 'lib/jquery-1.7.2.js'
  }
});

seajs.use('$', function() {
  // Got $ !
});
相關文章
相關標籤/搜索