2015-01-15 31 views
2

我可以通過RequireJS加載jQuery遷移嗎?我不明白如何正確處理時間。看到這個例子:如何通過RequireJS爲jQuery加載jQuery遷移?

require([ 
    'jquery', 
    'jqmigrate' 
], function ($) { 
    if ($.browser.msie) {...} 
}); 

是不是有可能是jqmigratejquery之前加載?另外,我不想在每個模塊中明確加載jqmigrate。任何方式在require.config中這樣做,所以它需要jQuery時自動加載jqmigrate

回答

2

使用墊片爲我工作。我確實被卡住了,因爲我有複數墊片; shim

requirejs.config({ 
    paths: { 
     'jquery': '//code.jquery.com/jquery-2.1.4', 
     'jquery-migrate': '//code.jquery.com/jquery-migrate-1.2.1' 
    }, 
    shim: { 
     'jquery-migrate': { deps: ['jquery'], exports: 'jQuery' }, 
     'foo': ['jquery'] 
    } 
}); 
require(['jquery-migrate', './foo'], ($, foo) => { 
    console.log('bootstrapped', $, foo); 
}); 
2

有一對夫婦的事情,你將需要:

  1. 確保jqmigrate取決於jquery
  2. 你可以寫一個包裝模塊包括,並返回jQuery的,所以你的require.config可能看起來像:

jQuery的wrapper.js:

define(['jquery-src', 'jqmigrate'], function ($) { 
    return $; 
}) 

require.config

{ 
    paths: { 
    'jquery-src' : '/path/to/jquery', 
    'jqmigrate': '/path/to/jqmigrate', 
    'jquery': '/path/to/jquery-wrapper' 
    } 
} 
+0

在這個方法適用於我之前,我必須從'function' params中移除'''',否則'$'是未定義的。 – Reuben

+0

這可能意味着你從全局範圍而不是從requireJS模塊中取得。 –

+0

我現在很可能是這樣,但我認爲奇怪的是,我認爲jQuery實例的'jquery-src'的返回值沒有填充到'$'中。 – Reuben

1

jQuery的遷移3.0.1目前具有使得它無法用於RequireJS或任何AMD裝載機中的缺陷。改變是需要的UMD片段落實接受的答案之前:

define([ "jquery" ], function ($) { 
    return factory($, window); 
}); 

詳情及解決here