在RequireJS环境中同时使用Lo-Dash和Underscore

Don*_*lor 8 javascript amd requirejs underscore.js lodash

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

Don*_*lor 7

我能够相当简单地解决问题.具体使用lodash需要Lo-Dash的模块的路径和underscore需要"下划线"的模块:

require.config({
  paths: {
    'underscore': 'path-to-my-underscore-file',
    'lodash': 'path-to-my-lodash-file'
  }
});
Run Code Online (Sandbox Code Playgroud)

这样,两个库可以同时使用而不受任何干扰.

与流行的信念和主张相反,Lo-Dash并不是Underscore的完美替代品.


Par*_*ris 5

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

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'
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

如果你想创建一个外观,你也可以做这样的事情:

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'
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

虽然这种方法存在一些负面影响.有一些很酷的东西.即能够重新映射第三方依赖关系可能认为包是什么(如果这是一个问题).

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