1

이 전역 개체를 사용하는 것은 나를 위해 문제가되었습니다. 명시 적으로 요구하지 않고 위의 파일에서글로벌 객체를 사용하지 않고 뭔가를 goog.provide하는 방법이 있습니까?

goog.provide('app.a'); 

goog.require('app.b'); 

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

참고, 내가 app.c을 사용하고 있습니다 :

a.js에서 : 여기에 내 문제를 설명하는 간단한 예입니다.

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을 사용할 수있는 방법을 좋아하지 않습니다.

가장 좋은 해결책은 각 파일이 goog.require 호출에서 빌드 된 app 전역 변수의 자체 복사본을 어떻게 든 사용할 수 있는지 여부입니다. 이로 인해 require d가 아닌 무언가를 사용하려고하면 런타임 오류가 발생합니다. 이것이 가능한지 확실하지 않습니다.

내가 설명한 것에 대한 방법이 있습니까? 아니면 대안이 있습니까?

답변

0

app.a에서 app.c에 대한 require를 지정하지 않아도되는 이유는 없지만 권장 사항이지만 컴파일러에서 요구 사항을 수집하는 방식 때문에 필요하지 않은 경우에는 catch하지 않습니다. . app.b 요구 사항을 제거하면 오류가 발생합니다. 많은 수의 많은 클로저 토큰이 필요합니다.