2012-07-31 4 views
3

CoffeeScript로 RequireJS를 빌드하고 실행할 때 일반적인 방법으로 이해할 때 예상 된 순서대로 코드가 실행되지 않는 것 같습니다. RequireJS 순서가 잘못된 실행 - 'require'에 대한 인수를 사용하지 않음

<script src="/_s/lib/require-jquery.js"></script> 
<script> 
    require.config({ 
    paths: { 
     "main": "/_s/all.min", // <--- the 'optimized' result of `$ r.js build.js` 
    } 
    }); 
    require(["main"], function() { 
    // this executes without any regard to whether 'main' is loaded. 
    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    // also: 
    // require('cs!csmain') throws an exception because "cs!csmain" has not been 
    // loaded for context: '_'. 
    }); 

한 예

that's what the documentation says 때문에, require(["main"], ...에 전달하는 기능이 주 후에 실행하고 모든 종속성이로드됩니다 기대.

그러나 그런 경우는 아닙니다. 내 로컬 개발 시스템에서이 문제는 자체적으로 나타나지 않습니다. 일종의 경쟁 조건이기 때문에 문제가 발생하지 않을 것입니다. 배포/준비 후에 만 ​​자르기 때문입니다.

({ 
    baseUrl: 'mycode', 
    optimize: 'none', 
    out:  'all.min.js', 
    stubModules: ['cs', 'coffee-script'], 
    paths: { 
     ... 
     underscore: '../lib/lodash' 
    }, 
    name: 'main', 
    shim: { 
     ... 
    } 
}) 

사람이 어떻게 여기에 무슨 어떤 생각을 가지고 있습니까 :의 라인을 따라 r.js에 인수로 불리는 build.js과 함께

var _paths; 

_paths = { 
    ... 
    underscore: '../lib/lodash' 
}; 

require.config({ 
    baseUrl: '/_s/mycode/', // main.js lives here 
    paths: _paths, 
    shim: { 
    ... 
    'timeago': ['jquery'] 
    }, 
    waitSeconds: 60 
}); 

require(['cs!csmain']); // has all the dependencies 

:

는이 같은 간단한 main.js이 ? 내 코드를 합리적인 모듈로 나눌 수있는 능력과 결합 된 RequireJS의 비동기 성격을 정말 즐긴다.하지만이 문제는 특히 스테이징/프로덕션 환경에서만 보여주기 때문에 실망 스럽다.

모든 의견과 제안을 부탁드립니다.

EDIT : 질문을 줄이기 위해 일부 불필요한 주장을 삭제했습니다.

+0

브라이언, 일부 사이트에이 코드가 게시되어 있으므로 디버깅을 시도하여 무슨 일이 일어나는지 확인할 수 있습니까? 귀하의 구성을보고 있기 때문에 아무런 문제가 보이지 않을 것입니다. 아마도 디버깅을 할 것입니다 ... – devundef

+0

@devundef : 의견을 주셔서 감사합니다. 나는 코드도 괜찮아 보였다고 생각했다. :) 디버깅 몇 시간 후, 난 단지 위의 문제를 좁혔습니다. jsFiddle에서 문제를 재현하고 재현 할 수는 있지만 휴식을 취해야하므로 처음에는 미쳐 가지 않습니다. :) –

+0

가끔 코드가 우리를 미치게 만들 수 있습니다. 그렇죠? :) 그렇다면 jsFiddle에서 오류를 재현 할 수 있다면 더 좋습니다. – devundef

답변

2

나는이 문제를 해결했다고 믿는다 - main.jsdefine으로 전화를 포함해야하고, 나는 posted in an issue on GitHub이다.

+0

와우, 나는 항상 내 메인 모듈 내부에서 요구를 사용하고이 문제는 결코 일어나지 않았다. 하지만 require() 대신에 define()을 사용하는 것이 더 합리적입니다. 이 문제가 해결되면 알려 주시기 바랍니다. – devundef

+0

@devundef : 필자는 항상 메인 모듈에'require '를 넣었다. 나는 그것을 할 수있는 방법이라고 생각했다. (어떤 상황에서는'main.js'에서'define '이 막연하다는 것을 모호하게 기억한다.) 내가 한 일이 실제로 '올바른'해결책인지 아닌지 알아낼 수 있기를 기대합니다. –

관련 문제