【发布时间】:2015-07-15 20:45:33
【问题描述】:
我有这样的遗留代码和模块定义:
define(["a", "b", "c", "d"], function(a, b, c) {
...
});
您可以看到,我们在模块中使用的依赖项比实际参数多。
这有意义吗?我认为模块 "d" 是多余的。
【问题讨论】:
标签: javascript requirejs requirejs-define
我有这样的遗留代码和模块定义:
define(["a", "b", "c", "d"], function(a, b, c) {
...
});
您可以看到,我们在模块中使用的依赖项比实际参数多。
这有意义吗?我认为模块 "d" 是多余的。
【问题讨论】:
标签: javascript requirejs requirejs-define
这只意味着模块“d”(或者更准确地说,调用“d”的工厂函数的结果)不会作为参数(例如d)传递给函数,所以它在里面是不可用的。
模块“d”可能会执行一些带有副作用的代码,因此删除它可能会改变您的应用程序的行为方式(即破坏某些东西)。
【讨论】:
d 参数,但它不会在函数中使用 - 根据你的 JS linter 配置,这可能被认为是样式违规。
定义的依赖项列表比在 define 调用的工厂函数上声明的传递参数列表长是 RequireJS 的常见情况,并不表示代码有任何问题。
例如,当使用带有插件的 jQuery 时,出现类似以下内容是完全正常的:
define(['jquery', 'jquery.foo'], function ($) {
// Use the foo plugin.
$('p').foo(...)
其中 'jquery.foo' 是一个实现 jQuery 插件的模块。 jQuery 插件将自己作为方法安装在 jQuery 对象上(我们在上面的代码中得到 $)。当使用 RequireJS 加载此类插件时,它们通常没有有用的 module 值。如果把上面的函数改成function ($, foo),foo参数很可能是undefined。
请注意,这些需要泄漏全局变量。如果 jquery.foo 被写入以便它注册为适当的 AMD 模块,那么它不依赖于 jQuery(或 $ 全局),因此 jQuery.noConflict(true) 可以在加载之前被调用以删除 jQuery 的全局变量默认创建。
【讨论】: