有没有办法在没有使用全局对象的情况下`goog.provide`?

时间:2014-01-23 19:20:59

标签: javascript dependency-management google-closure-library

使用全局对象对我来说是个问题。这是一个简单的例子,说明了我的问题:

a.js

goog.provide('app.a');

goog.require('app.b');

app.a = function () {
    return [
        app.b('Hey, there!'),
        app.c('yo')
    ];
};

请注意,在上述文件中,我使用app.c而未明确要求它。

b.js

goog.provide('app.b');

goog.require('app.c');

app.b = function (msg) {
    return app.c('b ' + msg);
};

c.js

goog.provide('app.c');

app.c = function (msg) {
    return { msg: msg };
};

我可以通过closurebuilder来运行它,它会运行得很好。它也将在浏览器中无错误地运行。但我不喜欢app.c在没有明确要求的情况下可以使用的方式。

我能想到的最佳解决方案是,每个文件是否可以某种方式使用自己的app调用构建的goog.require全局变量副本。当您尝试使用不是require d的内容时,这会导致运行时错误。不确定这是否可行。

有没有办法做我描述的,或者有其他选择吗?

1 个答案:

答案 0 :(得分:0)

没有理由不在app.a中提出app.c的要求,这是一种最佳做法但是如果不这样做,它将无法捕获它,因为编译器需要采用这些要求。如果你删除了app.b的要求,只会出现许多很多很多关闭土地的怪癖,那就会引发错误。