【问题标题】:lodash function's prefixlodash 函数的前缀
【发布时间】:2018-01-24 17:23:22
【问题描述】:

如果这个问题听起来很愚蠢,我很抱歉,但是为什么人们使用_。在 lodash 函数之前。我见过人们通常使用_。像 _.cloneDeep() 用于 lodash 函数,但有时他们似乎使用 lodash 函数而没有像 here 这样的任何东西。有什么原因吗?

【问题讨论】:

  • 基本上是因为它看起来很酷。就像你可以通过前缀$来调用Jquery一样,lodash是prefirex by _他们不使用_的原因。在您的链接中是他们只从 lodash 导入一个函数,而不是整个库
  • _ 是一个包含被调用方法的对象。 Back to school ...
  • @Borjante 这与看起来很酷无关......哈哈
  • @mhodges 命名 lodash 的原因似乎是因为酷的因素 (stackoverflow.com/questions/38006384/…) - 无论如何。但是,您是对的,这不是这个问题的真正意义

标签: javascript lodash


【解决方案1】:

这取决于您设置的 JavaScript 环境。在某些环境中,您唯一的选择是使用具有所有功能的全局下划线 (_) 对象。

当使用支持 ES6 模块的运行时或编译时环境时,您可以像这样一次导入一个函数

import { cloneDeep } from 'lodash';

或者这个

import cloneDeep from 'lodash/cloneDeep'; 

甚至还有ES6 Module for each functionother package formats as well

import cloneDeep from 'lodash.clonedeep';

ES6 模块选项可以帮助您为您的应用制作更小的捆绑包。

前两个样本 - 两者是等价的 - 依赖 tree shaking 来编译一个更小的包。

在第三个示例中,我们只包含我们需要的功能。但是,对于我们想要使用的每个功能,我们都需要npm install --save lodash.clonedeep

【讨论】:

  • “ES6 模块选项可以帮助你为你的应用创建一个更小的捆绑器”。我认为这只适用于摇树的捆绑器,对吗?我认为默认情况下不会发生这种情况
  • 如果您从 每个模块一个函数 模块导入,根据定义,您将减少捆绑包而不依赖摇树。
  • 啊,笨蛋——我不知道为什么我没有看到那个。我以为你刚刚说的是import cloneDeep from 'lodash'。是的,你是对的——我的错。
  • 感谢您的反馈。我更新了我的答案以澄清差异。
【解决方案2】:

这与 lodash 的导入方式有关。大多数时候,人们都说import * as _ from lodash,所以lodash的整个库都是用_来引用的。

但是,在您提供的情况下,它们只是按名称从 lodash 导入单个函数(其工作方式类似于 object destructuring - 它将创建一个标识符等于您正在提取的属性名称的局部变量),因此不需要 _ 前缀。

我更喜欢这样做:

import { find } from 'lodash';
var _ = { find };

var item = _.find(.....);

如果您使用的是 TypeScript,Partial 在这里会派上用场,如下所示:

var _:Partial<LoDashStatic> = {find};

这样您就可以获得智能感知/类型安全,而无需导入整个 lodash 库。另外,您的语法不会改变 - 它始终以 _. 为前缀

我喜欢它前缀的原因是我可以保证导入的标识符永远不会与我拥有的任何本地标识符冲突。此外,我总能一眼就知道某个东西是否是 lodash 方法,而无需向上滚动并查看该文件的导入。

【讨论】:

    【解决方案3】:

    关键是这一行:

    import { find } from 'lodash';

    在这种情况下,他们会从 lodash 中“提取”一个函数并将其分配给变量 find

    如果您只需要来自 lodash 的一两个函数,这很好。但是如果你需要几个,这个技术会有点麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多