Javascript “如何防止或调试”;“缺少依赖项链接”;在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 () { ... }

RequireJS依赖项表示为偏序。。。太棒了!每个模块都可以精确地指定它所需要的依赖项,仅此而已。特别是,不需要指定所有模块之间的线性顺序

经常提到的一个问题是,可能会意外地指定循环依赖项。我现在遇到了你可能称之为相反的问题。假设我有三个模块,
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给出的答案是,我认为,对于具有严格测试实践的大型项目来说,这是一种“正确”的方式。但我在找更简单的。例如:

  • 一种编码约定,通过构造保证适当的依赖关系
  • 一种工具,运行所有可能的加载顺序,然后检查结果状态是否相等

设计您的单元测试,使它们从不存在模块的状态开始,并且不加载整个应用程序,而只加载正在测试的模块。加载此模块将导致加载其依赖项。如果忘记了依赖项,那么测试应该失败。

非常好的建议!我一定会遵守的然而,这并不完全是我想要的,因为它依赖于严格的单元测试实践的使用。我正在考虑的项目确实会这样做,但仍处于原型/实验阶段,严格的测试是一种负担而不是优势我对这个问题补充了一些想法。