代码之家  ›  专栏  ›  技术社区  ›  Dolan

同时从“lodash”、“rxjs”、“ramda”导入“map”,但不影响可读性

  •  1
  • Dolan  · 技术社区  · 6 年前

    一个怎么进口 map merge 或者其他来自多个导入的函数?

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

    但这是 丑陋的 并隐藏代码。我认为这是一次黑客攻击,不是解决方案,而是由于静态分析的局限性而采取的一种变通方法。

    我可以用另一种方式思考:

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

    然而,JS社区由于树木晃动的原因而对此表示不满。但是,我相信 过分夸张 , only saving 45kb .

    3 回复  |  直到 6 年前
        1
  •  2
  •   Eugene Tsakh    6 年前

    基本上,您可以创建自己的util包。例如:

    // utils/lodash.js
    export { map, get, set } from 'lodash';
    
    // yourScript.js
    import * as _ from 'utils/lodash';
    
        2
  •  0
  •   colby brooks    6 年前

    诚实地说,这取决于你/你为价值而工作的人。有时额外的45kb是可怕的,但大多数时候,尤其是在个人项目上,没有人应该关心。如果它能让你的编程更高效,那就用最适合你的东西吧。

        3
  •  0
  •   JohnsonCore    6 年前

    如果您在整个应用程序中为特定用例(可观察的、数组/对象操作等)使用这些映射特性,那么最好重命名这些方法以反映应用程序的特定用例。

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

    例如,rxjs.map将变为mapobservable等。在模块之间强制使用新名称会有一个维护命中,但好处是,开发人员需要做的上下文切换更少,以了解正在使用的内容和原因。

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

    另一种减少维护的方法是通过包装器公开这些方法,并让您的团队为那些特定的函数使用这个包装器。