解決sea.js引用jQuery提示$ is not a function的問題


在使用sea.js的如下寫法引用jQuery文件時,

//main.js
define(function(require,exports,module){ var $ = require('jquery-3.1.0.min'); $('#name').html('helloworld'); })

會報錯,提示$ is not a function;

原因在於jQuery是默認支持AMD規范的,而sea.js是遵循CMD規范進行加載;這兩種規范對外提供模塊時的定義方法不一樣:

// CMD
define(function(require, exports, module) {
    var a = require('./a')
    a.doSomething()
    // 此處略去 100 行
    var b = require('./b') // 依賴可以就近書寫
    b.doSomething()
    // ...
})

// AMD 默認推薦的是
define(['./a', './b'], function(a, b) { // 依賴必須一開始就寫好
    a.doSomething()
    // 此處略去 100 行
    b.doSomething()
    // ...
})

jQuery對外提供模塊時默認支持的是AMD規范,其寫法為:

if ( typeof define === "function" && define.amd ) {
    define( "jquery", [], function() {
        return jQuery;
    } );
}

因此,如果想讓jQuery支持CMD規范,則將以上代碼修改為如下代碼即可:

if ( typeof define === "function") {
    define(function(require,exports,module){
        return jQuery;
    });
}

其區別就在於define方法支持規范的判斷,以及參數類型的不同。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM