2017-04-18 200 views
18

我试图导入isEqual,因为lodash似乎在导入所有内容。我试着做了,没有从成功的WebPack以下如何导入单个lodash函数?

import { isEqual } from 'lodash' 

import isEqual from 'lodash/lang' 

import isEqual from 'lodash/lang/isEqual' 

import { isEqual } from 'lodash/lang' 

import { isEqual } from 'lodash/lang' 
+0

你的意思是https://www.npmjs.com/package/lodash.isequal? –

+1

不,我想导入其他功能 – cvDv

+2

以我的理解,你现在可以一个一个或全部导入,没有中间立场。即使它在软件包中添加了很多依赖关系,我也会一一推荐。json,以后一个一个地测试和升级方法会比较容易,而不是所有的都在一个步骤中 –

回答

28

可以作为一个单独的模块安装lodash.isequal,而无需安装整个lodash包像这样:

npm install --save lodash.isequal 

当使用ECMAScript 5 CommonJS的模块,你再导入它是这样的:

var isEqual = require('lodash.isequal'); 

使用ES6模块,这将是:

import isEqual from 'lodash.isequal'; 

来源:Lodash documentation

导入后,您可以在代码中使用isEqual功能。请注意,它不是名为_的对象的一部分,因此如果您以此方式导入它,那么您的 不会是将其与_.isEqual进行比较,而是直接与isEqual进行比较。

注:这个问题的其他答案建议你也可以使用破折号,而不是一个点,就像这样:

import isEqual from 'lodash/isequal'; 

这工作也是如此,但也有两个小缺点:

  • 你必须安装整个lodash包(npm install --save lodash),而不仅仅是单独的小lodash.isequal包;存储空间便宜,而且CPU速度很快,所以你可能不在意这个
  • 使用像webpack这样的工具时产生的bundle会稍微大些;我发现,束尺寸与isEqual最小代码的例子是平均大28%(试过的WebPack 2和的WebPack 3,有或没有巴别,有或没有丑化)
+0

由于某种原因,对于我而言,我使用_.isEquals时'_ is not defined' ' – cvDv

+2

@cvDv,但它不应该像'_.isEqual'一样使用,你应该直接使用'isEqual' –

+0

hmm im仍然得到'isEqual'没有定义,我添加了'import isEqual from'lodash.isequal''到顶部和下面是使用isEquals – cvDv

0

这实际上为我工作

import { isEqual } from 'lodash'; 
+11

您仍然可以使用此语法获得完整的lodash库。 OP希望只获得isEqual功能,减少他的捆绑包的大小。 – Nyegaard

15

如果您只想包含isEqual而不是lodash函数的其余部分(用于保持包大小很小),则可以在ES6中执行此操作;

import isEqual from 'lodash/isEqual' 

这是几乎一样的什么在the lodash README描述,除了那里,他们用require()语法。

var at = require('lodash/at');