Javascript 有没有安全的方法去';改道';requirejs 1.0模块依赖关系?

Javascript 有没有安全的方法去';改道';requirejs 1.0模块依赖关系?,javascript,requirejs,Javascript,Requirejs,在RequireJS 1.0 api中,如果“模块B”依赖于“模块a”,而“模块a”依赖于一些您不想让“模块B”知道的“模块C”,那么将“模块C”指向无操作模块的某个路径是最佳选择吗 // with RequireJS 1.0 api: define('ModuleA', ['ModuleC'], function(){ // Module C makes sense here, but down in the definition for Module B, // Module C

在RequireJS 1.0 api中,如果“模块B”依赖于“模块a”,而“模块a”依赖于一些您不想让“模块B”知道的“模块C”,那么将“模块C”指向无操作模块的某个路径是最佳选择吗

// with RequireJS 1.0 api:

define('ModuleA', ['ModuleC'], function(){
  // Module C makes sense here, but down in the definition for Module B,
  // Module C is dangerous.
})

// 2. here's an approach that comes to mind, but I think it's nasty:
require.config({
  paths: {
    'ModuleC': '/path/to/no-op/module'
  }
})

define('ModuleB', ['ModuleA'], function(){
  // 1. how do I depend on 'ModuleA' without depending on 'ModuleC'?
})

基本上,我想在模块B中重用模块A中的一些代码,但不包括模块C,模块C试图调用此环境中不存在的代码。

ModuleB
将不知道
ModuleC
(除非
ModuleA
以某种方式使其可访问)。但是,如果
ModuleB
需要
ModuleA
并且
ModuleA
需要
ModuleC
,则是的,
ModuleB
需要通过
ModuleA
加载
ModuleC
,即使
ModuleB
无法使用它

只需确保正确导出依赖模块,并将其作为已定义模块的参数传递,以便仅可在已定义模块的作用域中访问该模块:

define('ModuleA', ['ModuleC'], function(ModuleC){
  // ModuleC, passed as an argument, is only accessible here.
});

define('ModuleB', ['ModuleA'], function(ModuleA){
  // Though ModuleC has been downloaded b/c ModuleA requires it, 
  // Only ModuleA is available within this scope.
});

我想做的是避免在这里加载
ModuleC
。在我的例子中,甚至在页面上加载这些代码都是一个问题:(@RaulFenty听起来似乎不需要编写良好的模块。正如Require文档所述:“模块不同于传统的脚本文件,它定义了一个范围良好的对象,以避免污染全局命名空间。”如果
ModuleC
是这样编写的,那么作为
ModuleA