4

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

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

是不是可能jqmigrate会在之前加载jquery?另外,我不想jqmigrate在每个模块中都明确加载。有什么方法可以在需要 jQuery 时自动require.config加载?jqmigrate

4

4 回答 4

4

您需要做几件事:

  1. 确保 jqmigrate 依赖于jquery.
  2. 您可以编写一个包含两者的包装器模块,并返回 jquery,因此您的 require.config 可能如下所示:

jquery-wrapper.js:

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

需要配置

{
  paths: {
    'jquery-src' : '/path/to/jquery',
    'jqmigrate': '/path/to/jqmigrate',
    'jquery': '/path/to/jquery-wrapper'
  }
}
于 2015-01-15T22:36:53.453 回答
3

使用垫片对我有用。我确实卡住了,因为我有多个垫片;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);
});
于 2015-11-03T05:45:52.037 回答
2

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

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

详细信息和解决方案在这里

于 2018-02-15T20:56:32.757 回答
0

jquery-migrate-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'}
    }
  })
于 2021-10-31T15:28:31.347 回答