필자는 이상한 동작이 필요하므로 피하는 방법을 모르거나 기본이 잘못되었습니다. 'communication.data'자체가 '응용 프로그램'(도시 코드)를 필요로하기 때문에,순환 의존성을 해결할 때 순환 형식을 요구할 때 동기 형식을 사용합니다. 이름 바꾸기가 필요하지 않은 경우
define (require) ->
potoo = require "potoo"
service = require "communication.data"
downloadIfNeeded = ->
# ...
service.download()
new potoo.App
pageContainer: potoo.UI.NGStylePage
userRequired: true
stdRoute: "overview"
onLogin: downloadIfNeeded
이 작동하지 않을 :
는 다음과 같은 코드를 생각해 보자. 그래서 우리는 명백하게 순환 의존성을가집니다. '잡히지 않은 오류 : 모듈 이름'앱 '이 컨텍스트에 대해 아직로드되지 않았습니다.'
downloadIfNeeded 함수는 사용자가 실제로 무엇인가를 클릭 할 때까지 호출되지 않기 때문에, 다음 작동해야합니다 :
define (require) ->
potoo = require "potoo"
downloadIfNeeded = ->
service = require "communication.data"
service.download()
...
그러나 실제로 위와 같은 오류가 throw됩니다. 그것을 작동시키기 위해서, 나는 약간의 해킹을 사용해야한다. 나는 다른 이름으로 요구 함수의 별칭을 지정한다 :
define (require) ->
potoo = require "potoo"
reqs = require
downloadIfNeeded = ->
service = reqs "communication.data"
service.download()
...
이것이 최선의 방법인가? 또는 requirejs에서도 지원되는 CommonJS 스타일 (module.export)을 권하고 싶습니다.
질문 하단의 사이드 노트를 삭제했습니다. 실제로 다른 * 질문이었습니다 (원형 문제를 대답해도이 두 번째 질문에 답하지 않아도됩니다). 또한, 당신이 요구 한 것은 의견에 기반하거나 너무 광범위하기 때문에 SO에 적합하지 않습니다. (어떤 목적을 위해 "권장"합니까? 요구 사항은 일부 측면에서는 RequireJS보다 우수 할 수도 있지만 다른 부분에서는 그렇지 않을 수도 있습니다.) – Louis