【问题标题】:Import { map } from 'lodash', 'rxjs', 'ramda' at the same time without hurting readability同时从 'lodash'、'rxjs'、'ramda' 导入 { map } 而不会影响可读性
【发布时间】:2018-10-11 17:05:20
【问题描述】:

如何从多个导入中导入mapmerge 或任何其他函数?

import { map } from 'lodash';
import { map } from 'rxjs/operators';
import { map } from 'ramda';

显而易见的答案是:

import { map as _map } from 'lodash';
import { map as rxMap } from 'rxjs/operators';
import { map as RMap } from 'ramda';

但这是丑陋并且模糊了代码。由于静态分析的限制,我认为这是一种 hack,而不是解决方案,而是一种解决方法

我可以想到另一种方式:

import * as _ from 'lodash';
import { map } from 'rxjs/operators';
import * as R from 'ramda';

但是,由于 tree-shaking 的原因,JS 社区对此表示不满。但是,我认为这是过度夸大only saving 45kb

【问题讨论】:

    标签: javascript node.js lodash ramda.js


    【解决方案1】:

    基本上,您可以创建自己的实用程序包。例如:

    // utils/lodash.js
    export { map, get, set } from 'lodash';
    
    // yourScript.js
    import * as _ from 'utils/lodash';
    

    【讨论】:

    • 我不想导出默认值:blog.neufund.org/…
    • @Dolan 好的。使用通配符进行参数化导出和导入。
    【解决方案2】:

    老实说,这取决于您/您为之工作的人是否更看重。有时额外的 45kb 很糟糕,但大多数时候,尤其是在个人项目中,没人应该关心。如果它能让你的编程更有效率,那就选择最适合你的。

    【讨论】:

      【解决方案3】:

      如果您在整个应用程序中将这些地图功能用于特定用例(可观察对象、数组/对象操作等),最好重命名这些方法以反映应用程序的特定用例。

      我会将它们视为您拥有三个称为“map”的非供应商方法。如果您在自己的代码中发现了这一点,您将确定所有方法是否都执行相同的操作,如果不是,则重命名它们以更具体地说明它们的作用。

      例如,rxjs.map 将变为 mapObservable 等。在您的模块中强制执行您的新名称时会发生维护问题,但好处是您的开发人员需要做的上下文切换更少以了解正在发生的事情使用过以及为什么。

      这可能是一个非常主观的问题,因为答案可能会因团队、约定和您的应用程序而异。

      附:减少维护的一种方法是通过包装器公开这些方法,并让您的团队将此包装器用于这些特定功能。

      【讨论】:

      • 我开始喜欢的包装理念。这听起来像@Eugene 的想法
      • 我不喜欢 mapObservable 的原因是,按照这个定义,项目应该将它们的其他 rxjs 方法命名为 mergeObservable、tapObservable、combineLatestObservable?我们在哪里画线?这是一个很大的认知负担,会让我们所有人都头疼。
      • 我认为你是对的。 Eugene 的解决方案很优雅,可以让您两全其美。
      猜你喜欢
      • 1970-01-01
      • 2011-01-05
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      相关资源
      最近更新 更多