【问题标题】:Importing individual lodash functions instead of whole lodash project导入单个 lodash 函数而不是整个 lodash 项目
【发布时间】:2017-07-09 02:19:27
【问题描述】:

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

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

在我的代码中我只是在做

require('lodash');

我的 package.json 看起来像:

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

请注意,这仅适用于后端项目,而不适用于 Web,如果有影响的话。

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

看起来这里有一些答案:

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

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

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

然后像这样导入它:

 require('lodash.X');

【问题讨论】:

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


    【解决方案1】:

    两种方式

    有两种方法:

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

    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');
    

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

    【讨论】:

    【解决方案2】:

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

    import isEqual from 'lodash.isequal';
    

    Reference

    【讨论】:

    • 不,这仍然安装了所有的 lodash,查看 node_modules。
    • @AlexanderMills 请注意,导入是由模块化函数组成的(与 import isEqual from 'lodash/isequal' 相比)。
    【解决方案3】:

    正如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
    }
    

    不过,这仅适用于您的后端项目。但是,仅供参考和其他可能登陆这里的读者,webpack 加上lodash-es 可以将我的捆绑包大小从78 kb 和一般lodash 减少到18 kb

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-20
      • 2016-11-23
      • 1970-01-01
      • 2018-06-12
      • 2019-07-02
      • 2019-06-25
      • 1970-01-01
      • 2021-05-12
      相关资源
      最近更新 更多