【问题标题】:Restore original lodash method overwritten by mixin?恢复被mixin覆盖的原始lodash方法?
【发布时间】:2015-10-02 18:19:31
【问题描述】:

我们正在使用lodash-contrib 包,其中包含一个camelCase 方法,其行为与原始_.camelCase 方法不同。

有什么办法可以让指针恢复到原来的方法吗?

在 requirejs 配置中,我们有一个 shim:

lodashContrib: ['lodash']

加载 lodashContrib 后,它会立即将 mixins 添加到 lodash。我们的代码示例:

define([
    'lodashContrib'
], function() {
    // our code here. At this point, _.camelCase is overridden by contrib
});

【问题讨论】:

  • 这个是node.js还是requirejs?
  • RequireJS,所以我可以在加载contrib之前拦截原始的lodash方法。
  • browserify了吗?因为它说它只适用于节点,除非你这样做。如果您只是单独加载 lodash-contrib 库,那么您可以省略包含您不喜欢的 camelCase 实现的库。
  • 我们没有使用 browserify(或 webpack),所以我们真的无法控制构建,但不幸的是,我们需要的代码与我们不使用的 camelCase 位于完全相同的文件中't。
  • 您能否提供相关代码来准确演示 lodashlodash-contrib 是如何加载到环境中的?

标签: javascript requirejs lodash


【解决方案1】:

创建一个文件 lodashCustom.js 或您可以添加到您的 requirejs 配置中的文件,并将以下内容放入其中,然后在您需要 lodashContrib 的任何地方都可以使用它:

define(['lodash', 'lodashContrib'], function(_, _c) {
  _c.camelCase = _.camelCase;

  return _c;
});

假设您的 shim 实现不依赖于全局变量,这应该可以正常工作。

【讨论】:

  • lodash-contrib 不会作为参数传入,因此 _ 在加载时已被修改。
  • 这与您提供的示例代码相矛盾。 lodashContrib 是该模块的唯一参数。更重要的是,您现在所说的表明您的 shim 依赖于全局变量,这破坏了 requirejs 提供的模块化。像这样的问题是模块化很重要的全部原因。
  • 在我的示例代码中,define 回调没有参数,因为lodash-contrib 不能导出一个 - 它始终未定义。 Lodash 确实,所以在我们迁移到 lodash-contrib 之前,我们确实有过这样的争论。我没有指示 requirejs 或任何东西这样做。
  • 我不确定您的lodashContrib 模块是如何编写的,但它应该接受lodash 作为参数并返回修改后的_。除非您想通过 lodash 源并复制/粘贴用于定义 _.camelCase 的所有相关作用域函数,否则我建议您重写 lodashContrib 以采用这种方式。
  • 我无法控制它的编写方式,github.com/TheNodeILs/lodash-contrib
猜你喜欢
  • 2012-01-24
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
相关资源
最近更新 更多