如何通过 RequireJS 加载 jQuery Migrate for jQuery?

How to load jQuery Migrate for jQuery via RequireJS?

我可以通过 RequireJS 加载 jQuery 迁移吗?我不明白如何正确处理时间。看这个例子:

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

jqmigrate 不可能在 jquery 之前加载吗?另外,我不想在每个模块中显式加载 jqmigrate。有什么方法可以在 require.config 中执行此操作,以便在需要 jQuery 时自动加载 jqmigrate

您需要一些东西:

  1. 确保 jqmigrate 依赖于 jquery.
  2. 您可以编写一个包含两者的包装器模块,return 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'
  }
}

使用垫片对我有用。我确实被卡住了,因为我对其进行了复数化调整; 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);
});

jQuery Migrate 3.0.1 目前有一个缺陷,导致它无法用于 RequireJS 或任何 AMD 加载器。在实施接受的答案之前需要对 UMD 片段进行更改:

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

详情和解决方法在here.

jquery-迁移-wrapper.js

    define(['jquery', 'jquery-migrate'], function ($) {
        // additional initialization logic can be added here
        $.UNSAFE_restoreLegacyHtmlPrefilter();
        return $;
    })

需要-config.js

  require.config({
    ...otherConfigOptions,
    shim: {
      ...otherShimSettings,
      'jquery-migrate':{deps: ['jquery']},
    },
    map: {
      // provides 'jquery-migrate-wrapper' for all (*) modules that require'jquery'
      '*': { 'jquery': 'jquery-migrate-wrapper' },
      // but provides the original 'jquery' for 'jquery-migrate-wrapper' and       
      // 'jquery-migrate'
      'jquery-migrate-wrapper': { 'jquery': 'jquery' },
      'jquery-migrate': {'jquery': 'jquery'}
    }
  })