2012-06-05 4 views
14

은 main.js는 스크립트 호출이해 requirejs 경로

<script data-main="/javascript/main.js" src="/javascript/require-2.0.1.js"></script> 

공통으로 페이지에 포함이

requirejs.config({ 
    baseUrl: '/javascript/', 
    paths: { 
     jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min', 
     async: 'requirePlugins/async', 
      hbs: 'hbs' 
    }, 
    waitSeconds: 7 
}); 
define(['common'], function() { 
    loadFonts(); 
}); 

처럼 보이는 웹 사이트에 대한 기본 기능입니다 , jquery doc 준비 함수 등 정의 전화에 싸여 :

define(['jquery'], function() { 
    //jQuery dependant common code 
}); 

잘 작동, jQuery로드됩니다 f ROM에 Google의 CDN 코드가 실행됩니다. 내가 main.js의 부하 후 필요 호출을 추가하지만

<script data-main="/javascript/main.js" src="/javascript/require-2.0.1.js"></script> 
require(['jquery'], function ($) { 
    //code 
}); 

JQuery와는 /javascript/jquery.js 대신 구글 CDN에 정의 된 경로에서 요청됩니다. 나는 requirejs에서 여전히 신인이지만 다른 요청이 시작되기 전에 경로가 정의되어야한다고 생각한다. 누군가 내가 뭘 잘못하고 있는지 이해할 수 있도록 도와 줄 수 있을까?

답변

-2

나는 require 블록에 전체 URL을 삽입 할 수 있다고 생각합니다. like :

require(['http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min'], function ($) { 
    //code 
}); 

btw, 귀하의 jquery 링크가 유효하지 않습니다.

+0

을하지만 대신 전체 URL을 작성하지의 'jQuery를'사용할 수 있어야하므로 jQuery를은 AMD의 모듈로 자신을 정의 때마다. jquery 링크가 유효하지 않은 이유는 무엇입니까? –

+0

안녕하세요, http : // ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min'을 방문하여 404를 찾았습니다. – HungryCoder

+0

죄송합니다. requirejs가 .js를 스크립트는 모든 모듈이 스크립트라고 가정합니다. 귀하의 링크가 정확합니다. 혼란스러워서 죄송합니다. – HungryCoder

5

아마도 js가로드되기 전에 config 문을 넣었을 것입니다.

먼저 require.js를로드하고 설정 코드를 입력 한 다음 require ([ 'jquery'], ...);를 호출해야합니다.

require/js 파일이 여기에 있으며 기본 기본 URL이기 때문에/javascript /를 검색하는 이유입니다.

귀하의 설정은 절대로 require.js에서 사용할 수 없습니다.

this tutorial 필수 구성을 참조하십시오.

6

이것은 RequireJS 스크립트 태그에 data-main 속성을 사용했기 때문일 수 있다고 생각합니다. 이를 구문 분석하기 위해서는 RequireJS 자체가로드되고 구문 분석되어야합니다. 내 테스트 (특히 IE9)에서 브라우저는 RequireJS 구성 파일 (data-main 특성에 지정된 매개 변수)을 구문 분석하기 전에 RequireJS 스크립트 태그 바로 다음에 스크립트 태그를 다운로드하고 실행합니다.

이 문제를 해결하려면 간단히 data-main 속성을 사용하지 않고 단순히 RequireJS 스크립트 태그 바로 다음에 일반 스크립트 태그로 설정 파일을 저장하면 모든 것이 만족스럽게 보입니다.

특히이는 (샘플을 사용하는) 모습입니다 :

<script src="/javascript/require-2.0.1.js"></script> 
<script src="/javascript/main.js"></script> 
+2

이것에 1 시간 이상을 낭비한 후에 나는'data-main'도 포기했습니다. 두 스크립트 접근법을 사용하면로드 오류 정의가 제거되었습니다. TYVM! – Yuck

0

당신은 내가 구성 map 대신 paths의 사용을 권장 것

require(['common'], function() { 
    loadFonts(); 
}); 
0

을 요구하는 정의의 이름을 변경해야 특정 모듈 위치.

paths은 전체 모듈 경로가 아니라 단순화/구성 포함을위한 단축키/접두사를 더 많이 사용합니다.

염두에 두십시오 : map 개체의 별표 (*) 키 아래에 전역 적으로 적용 할 매핑을 배치해야합니다.

0

이유는 require.js 모듈을로드 한 직후에 require(['jquery']...을 입력했기 때문입니다. 결과적으로 구성 설정을 읽기 전에 ['jquery']을로드하려고 시도합니다.

왜 jquery를 찾으려고 시도합니까 /javascript/jquery.js? 이는 data-main 속성 때문입니다.

RequireJS는 baseUrl을 기준으로 모든 코드를로드합니다. baseUrl은 이며, 페이지에로드 할 최상위 스크립트의 데이터 기본 속성에 사용되는 스크립트와 동일한 디렉토리로 설정됩니다.

이 링크는 require.js에게 모듈 공급 절차를 명확 : 내가 할 수있는 http://requirejs.org/docs/api.html#jsfiles