在 RequireJS 环境下同时使用 Lodash 和 Underscore

Using Lo-Dash and Underscore simulatenously in RequireJS environment

在 RequireJS 环境中,允许某些 AMD 模块使用 Lo-Dash 而其他模块同时使用 Underscore 的最佳方法是什么?

我能够相当简单地自己解决问题。特别是对需要 Lo-Dash 的模块使用 lodash 路径,对需要 "underscore":

的模块使用 underscore
require.config({
  paths: {
    'underscore': 'path-to-my-underscore-file',
    'lodash': 'path-to-my-lodash-file'
  }
});

这样两个库可以同时使用,互不干扰

与普遍的看法和说法相反,Lo-Dash 并不是 Underscore 的完美替代品。

您已经提到的路径解决方案是一个选项(我认为更好)。我知道另一种方法,但我不一定认为它更好,因为它更具欺骗性。您可以重新映射 "lodash" 和 "underscore" 对各种包的含义。

requirejs.config({
    paths: {
        'underscore': 'path-to-my-underscore-file',
        'lodash': 'path-to-my-lodash-file'
    },
    map: {
        'some/lodash_compatible_module': {
            'underscore': 'lodash'
        },
        'some/lodash_compatible_folder': {
            'underscore': 'lodash'
        },
        'some/oldmodule_or_folder': {
            'underscore': 'underscore'
        }
    }
});

如果你想创建一个立面,你也可以这样做:

requirejs.config({
    paths: {
        utils: 'lodash',
        'underscore': 'path-to-my-underscore-file',
        'lodash': 'path-to-my-lodash-file'
    },
    map: {
        'some/lodash_compatible_module': {
            'utils': 'lodash'
        },
        'some/lodash_compatible_folder': {
            'utils': 'lodash'
        },
        'some/oldmodule_or_folder': {
            'utils': 'underscore'
        }
    }
});

虽然这种方法有一些缺点。有一些很酷的东西。即能够重新映射第三方依赖项可能认为包是什么(如果这是一个问题)。

有关地图工作原理的更多信息,请查看:http://requirejs.org/docs/api.html#config-map