导入单个lodash函数而不是整个lodash项目

时间:2017-02-19 22:42:41

标签: node.js npm underscore.js lodash npm-install

我看到导入整个lodash库会占用磁盘上相当多的空间:

$ du . | grep lodash
1696    ./lodash/fp
5000    ./lodash

在我的代码中,我正在做

require('lodash');

和我的package.json看起来像:

"dependencies": {
   ...
   "lodash": "^4.6.1",
   ...
}

请注意,这仅适用于后端项目,而不适用于网络,如果这会产生影响。

所以我的问题是 - 在没有导入整个该死的东西的情况下,导入一片lodash(只是我需要的函数)的最新方法是什么?

看起来这里有一些答案:

https://gist.github.com/callumlocke/bbfc524eaed6b3556dab

我的猜测是我应该在后端项目中使用点语法:

"dependencies": {
   ...
   "lodash.X": "^4.6.1",
   ...
}

然后像这样导入它:

 require('lodash.X');

3 个答案:

答案 0 :(得分:9)

两种方式

有两种方法可以做到:

  1. 您可以使用具有各个功能的包,例如require('lodash.head')
  2. 您可以使用完整的套餐,例如require('lodash/head')
  3. require('lodash.head')

    您安装具有单独功能的包:

    npm install --save lodash.head
    

    这将此添加到package.json:

    "dependencies": {
      "lodash.head": "^4.0.1"
    }
    

    您可以将其用于:

    var head = require('lodash.head');
    

    require('lodash/head')

    您安装了完整的lodash包:

    npm install --save lodash
    

    这将此添加到package.json:

    "dependencies": {
      "lodash": "^4.17.4"
    }
    

    您可以将其用于:

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

    更多例子

    更复杂的例子:

    您可以_使用您需要的两个功能:

    var head = require('lodash.head');
    var tail = require('lodash.tail');
    var _ = {pick, defaults};
    

    效果相似,风格各异:

    var _ = {
      head: require('lodash.head'),
      tail: require('lodash.tail'),
    };
    

    说明

    如果你只想要一些lodash,例如lodash.pick然后使用:

    有关打包为模块的单个函数的更多示例,请参阅:

    您也可以使用自定义构建,请参阅:

    当您使用完整包并仅导入所需的功能时:

    var _ = {
      head: require('lodash/head'),
      tail: require('lodash/tail'),
    };
    

    然后像Webpack这样的工具可能能够优化您的构建,只包含您实际使用的代码。当您使用以下内容导入整个lodash时

    var _ = require('lodash');
    

    然后静态分析无法确定在运行时将使用哪个函数,因此很难进行优化,通常构建中包含的代码通常比实际需要的多。

答案 1 :(得分:3)

使用ES6模块,也可以这样做:

import isEqual from 'lodash.isequal';

Reference

答案 2 :(得分:0)

this answer中所述,您可以使用lodash-es作为替代。而不是为每个要使用的lodash函数运行npm install lodash ...。通过使用lodash-es,您只需安装一次,然后就可以导入要在代码中使用的lodash函数。

使用NPM安装lodash-es

npm install lodash-es

要导入特定功能,isEqual

import { isEqual } from "lodash-es";

现在,您可以在代码内使用isEqual函数了。

const a = {a: "a"};
const b = {b: "b"};

if (isEqual(a, b)) {
  //do something
}

尽管如此,这仅适用于您的情况下的后端项目。但是,FYI和其他可能会在这里使用的读者webpacklodash-es可以将我的捆绑包大小从18 kb降低到78 kb,而一般是lodash。 >