Javascript “如何防止或调试”;“缺少依赖项链接”;在RequireJS项目中?
RequireJS依赖项表示为偏序。。。太棒了!每个模块都可以精确地指定它所需要的依赖项,仅此而已。特别是,不需要指定所有模块之间的线性顺序 经常提到的一个问题是,可能会意外地指定循环依赖项。我现在遇到了你可能称之为相反的问题。假设我有三个模块,Javascript “如何防止或调试”;“缺少依赖项链接”;在RequireJS项目中?,javascript,requirejs,dependency-management,amd,Javascript,Requirejs,Dependency Management,Amd,RequireJS依赖项表示为偏序。。。太棒了!每个模块都可以精确地指定它所需要的依赖项,仅此而已。特别是,不需要指定所有模块之间的线性顺序 经常提到的一个问题是,可能会意外地指定循环依赖项。我现在遇到了你可能称之为相反的问题。假设我有三个模块,A、B和C: define('A', [], function () { ... }); define('B', ['A'], function () { ... }); define('C', [], function () { ... }
A
、B
和C
:
define('A', [], function () { ... });
define('B', ['A'], function () { ... });
define('C', [], function () { ... });
这些模块之间的实际加载顺序是不确定的。在这种情况下,有三种可能的加载顺序:A
→<代码>B→<代码>C,A
→<代码>C→<代码>B和C
→<代码>A→<代码>B。依赖关系结构确保总是在B
之前加载A
现在想象一下,在某个时刻,模块C
也变得依赖于A
,但我忘了在模块头中指定它。这将很难发现。三分之二的运行(假设所有订单的可能性相同)不会出现任何问题,因为纯粹是偶然的,A
恰好在C
之前加载。但在三分之一的情况下,会出现错误消息(或者更糟的是,错误行为)
如果所有模块都返回一个值作为其唯一接口,则不会存在此问题。然后,由于缺少相应的函数参数,将显示一条非常清晰的错误消息。但实际上,许多模块只是通过访问全局状态或通过自己的依赖链接修改状态来添加或更改某些内容。例如,AngularJS指令和服务就是这样
问题:什么是防止这种情况发生的好方法,或者在出现这种情况时进行调试
Louis给出的答案是,我认为,对于具有严格测试实践的大型项目来说,这是一种“正确”的方式。但我在找更简单的。例如:
- 一种编码约定,通过构造保证适当的依赖关系
- 一种工具,运行所有可能的加载顺序,然后检查结果状态是否相等