我有一个包含utils方法的文件。每个都会单独导出。我的处境是一个实用程序需要另一个。我目前定义了在使用之前使用的函数。但是我遇到了ES6的循环依赖关系,使用它就不需要仔细组织util函数了。我有什么理由不使用它吗?
简化,例如:目前:
export const safeParsing = (str) => {
try { return JSON.parse(str); }
catch (e) { return {}; }
};
export const parseToken = (t) => safeParsing(t);
使用循环dep:
import * as self from 'src/jsUtils';
export const parseToken = (t) => self.safeParsing(t);
export const safeParsing = (str) => {...}
编辑:使用循环导入还使我能够使用spyOn(Jest(内部函数。例如:
test('parseToken uses safe parsing', () => { ... spyOn safeParsing ... });
相关参考文献:
ES6模块:导出单一类别的静态方法或多个单独的方法
https://stackoverflow.com/a/40242291/958598
https://stackoverflow.com/a/35225936/958598
https://stackoverflow.com/a/55193363/958598
如果使用function safeParsing() { ... }
将它们定义为普通函数,而不是将它们分配给常量变量,则排序不再重要,因为所有函数定义都被提升到作用域的顶部。因此,您可以按任何顺序使用所有函数。如果执行const safeParsing = ...
,则必须非常小心地对声明进行排序,因为只有在指定声明之后才能使用声明。这就是我使用正则命名函数声明而不是函数表达式(如您所示(的原因之一。
而且,你仍然可以做export function safeParsing() {...}
。只需使定义成为函数声明,而不是函数表达式。