【问题标题】:Is there a way to `goog.provide` something without using the global object?有没有办法在不使用全局对象的情况下“goog.provide”?
【发布时间】:2014-01-23 19:20:59
【问题描述】:

为此使用全局对象对我来说是个问题。这是一个说明我的问题的简单示例:

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 调用构建的。当您尝试使用不是required 的东西时,这将导致运行时错误。不确定这是否可能。

有没有办法按照我描述的方式做,或者有什么替代方法?

【问题讨论】:

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


    【解决方案1】:

    没有理由不在 app.a 中添加对 app.c 的要求,这是一种最佳做法,但是如果你不这样做,它就不会捕获它,因为编译器获取要求的方式。如果您删除了 app.b 要求,这将引发错误,这只是关闭土地的许多、许多、许多怪癖之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 2016-01-19
      相关资源
      最近更新 更多