seajs如何整合jquery

來源:互聯網
上載者:User

標籤:

轉自:http://www.tuicool.com/articles/bmuaEb

今天早上初嘗seajs,發現一個非常蛋疼的事情,使用官方demo中的jquery是沒有問題,

下載官方最新版jquery 2.1.1發現console.log($)返回null,百思不得其解!只能求助度娘!

在GitHub發現了玉伯的說明 《 直接調用 jQuery 外掛程式等非標準模組的方法 》

不過這方法在2.3版本貌似已經不行,seajs.modify方法已在這版本移除!

https://github.com/seajs/seajs/issues/286

這裡的標準模組指的是AMD和CMD的定義

引用玉伯在知乎的詳細回答

http://www.zhihu.com/question/20351507/answer/14859415

以下引用玉伯的回複大家會更加深入瞭解

@lifesinger 昨天折騰得太累了,不好意思。後來還是用 RequireJs 解決問題。另外,我想問問:1. AMD 是不是容易卡死UI? 2. 為什麼採用與 SeaJs同樣採用 CMD 規範編寫的 NodeJs 模組 不能直接調用——我大概觀察了下,好像定義格式不太一樣,這也是問題啊,既然遵循同樣的規範為什麼格式又不一樣,3. 用常規全域變數寫法寫的指令碼經過 shim 配置,在 var ejs = require(‘ejs‘) 後會覆蓋 ejs 的(全域)定義,但是可以直接 require(‘ejs‘),然後 ejs 會註冊到window 名下。4. 把一個常規指令碼,換成 SeaJs 標準格式 跟 RequireJs 轉換有什麼不同嗎?另另外,感覺RequireJS 的自動載入外掛程式機制挺不錯。
@iahuAMD 是一載入就執行,當一次載入很多檔案時,意味著會立刻執行大量指令碼,這時可能會導致 UI 卡。CMD 的執行是分散的,因此一般來說不會造成 UI 卡。SeaJS 與 Node.js 的關係,可參考這篇文檔:#275shim 配置後,require(‘ejs‘) 得到的 ejs 就是全域那個 ejs,也可以將掛載在 window 上的 ejs 去掉,比如seajs.config({  plugins: ["shim"],  alias: {     src: ‘path/to/ejs.js‘,     exports: function() { var ejs = window.ejs; window.ejs = undefined; return ejs }  }})RequireJS 的 shim 外掛程式,本質上和 SeaJS 是一樣的。

以上提到的方法已淘汰了,只好繼續嘗試其他辦法!

方法一:

還是玉伯老大的辦法《seajs 2.1.1中去掉了seajs.modify 後,如何preload CDN 中的jquery ?》

https://github.com/seajs/seajs/issues/862

整個文章主要是說不修改為CMD模式下在模組內部使用jquery,玉伯老大是不推介這樣,但還是可以實現

不過jquery檔案就不是在seajs.config裡配置了,是直接在head頭部引入檔案,就像平時那樣,然後在seajs內部某個事件機制觸發將全域的jQuery對象帶到內部module.exports對象;

seajs.on(‘exec‘, function(module) {  if (module.uri === seajs.resolve(‘jquery‘)) {    window.$ = window.jQuery = module.exports;  }});

方法二:

當然就是按照CMD定義做封裝一次jquery,方法也很簡單,只要把原始碼粘進去,然後返回jquery對象即可;

define(function(){    //jquery原始碼    return $.noConflict();});

這樣就可以在seajs.config引入檔案在內部其他模組使用,這裡返回為什麼是$.noConflict(),請看w3c學校介紹

http://www.w3school.com.cn/jquery/core_noconflict.asp
seajs.config({  base : "../sea-modules/",  alias : {    "jquery" : "jquery.js"  }});
define(function(require, exports, module){  var $ = require("jquery");  exports.showObj = function() {    console.log($);  }});

方法三:

參照seajs官方jquery封裝方法

if ( typeof module === "object" && module && typeof module.exports === "object" ) {    module.exports = jQuery;} else {    if ( typeof define === "function" && define ) {        define( "jquery", [], function () { return jQuery; } );    }}if ( typeof window === "object" && typeof window.document === "object" ) {    window.jQuery = window.$ = jQuery;}
https://github.com/seajs/examples

在目錄 sea-modules/jquery 裡就有封裝好的1.10版本;

https://github.com/seajs/seajs/issues/264


seajs如何整合jquery

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.