我有一个包含实用程序方法的文件。每个都是单独导出的。我处于一个实用程序需要另一个实用程序的情况。我目前在使用之前定义使用的功能。但我遇到了 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
最佳答案
如果您使用 function safeParsing() { ... }
将它们定义为普通函数,而不是将它们分配给 const 变量,那么顺序不再重要,因为所有函数定义都被提升到顶部的范围。因此,您可以按任何顺序使用所有功能。如果您执行 const safeParsing = ...
,那么您必须非常小心地对声明进行排序,因为它们只有在分配后才能使用。这是我使用常规命名函数声明而不是函数表达式(如您所示)的原因之一。
而且,您仍然可以执行 export function safeParsing() {...}
。只需让您的定义成为函数声明,而不是函数表达式。
关于javascript - ES6 : self-import vs ordering exports for referencing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61720949/