不确定是否已经问过这个问题,但我只是想知道是否使用RequireJS将依赖项导入到一个文件然后将该文件导入另一个文件意味着第二个文件必须导入与第一个文件相同的依赖项。
示例 -
档案A
define([
'jquery'
],function($) {
//jquery thing here
}
档案B
define([
'A'
],function(A) {
// do some jquery thing here
}
或
define([
'jquery','A'
],function($,A) {
// do some jquery thing here
}
答案 0 :(得分:2)
很好的模块化实践是让每个模块明确地列出自己的依赖项,而不是静默地依赖于通过中介加载的模块。因此,您的模块B应采用您为其建议的第二种形式:define(['jquery', 'A'], function ($, A) {...
。
现在,严格地说, 只有B
只需要A
而你能够在{{1}中使用jQuery没有B
明确依赖于jQuery。这是可行的,因为jQuery,即使它作为AMD模块加载,默认情况下会将B
和$
泄漏到全局空间中,就像它在RequireJS外部加载一样。但是,这不是好习惯。你不应该依赖于此,除非你有充分的理由并且非常详细地记录它。
答案 1 :(得分:-1)
你必须使用第三个选项,因为否则$将在模块B中未定义。但这并不意味着RequireJS会在内部导入jQuery两次,它只会传递$ variable。
define([
'jquery','A'
],function($,A) {
// $ was passed as a function argument.
}