javascript - ES6 : self-import vs ordering exports for referencing

标签 javascript ecmascript-6 jestjs cyclic-dependency

我有一个包含实用程序方法的文件。每个都是单独导出的。我处于一个实用程序需要另一个实用程序的情况。我目前在使用之前定义使用的功能。但我遇到了 ES6 的循环依赖,使用它消除了精心组织 util 函数的需要。有什么理由我不应该使用它吗?

简化如: 目前:

  export const safeParsing = (str) =>  { 
    try { return JSON.parse(str); }
    catch (e) { return {}; }
  };

  export const parseToken = (t) => safeParsing(t); 

使用循环依赖:

import * as self from 'src/jsUtils';

export const parseToken = (t) => self.safeParsing(t);
export const safeParsing = (str) => {...}

编辑:使用循环导入还可以让我窥探 (Jest) 内部函数。 例如:

 test('parseToken uses safe parsing', () => { ... spyOn safeParsing ... });

相关引用:

ES6 modules: Export single class of static methods OR multiple individual methods

https://stackoverflow.com/a/40242291/958598

https://stackoverflow.com/a/35225936/958598

https://stackoverflow.com/a/55193363/958598

最佳答案

如果您使用 function safeParsing() { ... } 将它们定义为普通函数,而不是将它们分配给 const 变量,那么顺序不再重要,因为所有函数定义都被提升到顶部的范围。因此,您可以按任何顺序使用所有功能。如果您执行 const safeParsing = ... ,那么您必须非常小心地对声明进行排序,因为它们只有在分配后才能使用。这是我使用常规命名函数声明而不是函数表达式(如您所示)的原因之一。

而且,您仍然可以执行 export function safeParsing() {...}。只需让您的定义成为函数声明,而不是函数表达式。

关于javascript - ES6 : self-import vs ordering exports for referencing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61720949/

相关文章:

javascript - 如何显示不连续折线图

javascript - Meteor JS 全局函数

javascript - JS解构。如何处理 null 或 undefined 值

javascript - 为什么我的考试被开 Jest 跳过了

javascript - 测试一个函数是否在另一个函数 Jest 中被调用

javascript - 发送 xhrPost 请求时 DOJO 'TypeError:Cannot read property ' style of null 错误响应

javascript - 如何正确隐藏我的 HTML 下拉菜单?

javascript - 为什么当一个组件被包装在高阶组件中时,新组件没有原始组件的任何静态方法?

javascript - React 中的 constructor/super/bind 的用法是什么?

jestjs - Jest - 为项目中的所有文件运行覆盖率报告?