2013-10-21 2 views
2

브라우저가 내 최적화 된 JS 번들을 캐시하지 않도록하려면 요청 URL에 MD5 합계를 포함하고 싶습니다. 내가 좋아하는 뭔가를 시도 :쿼리 문자열이 작동하지 않는 RequireJS data-main

쿼리 문자열의 도입 /main.js에 GET 요청을 발생하지만
<script src="lib/require.js" data-main="app/main.js?md5=ABCD"></script> 

. 즉, 쿼리 문자열이 누락되어 심지어 경로에서 scripts이 누락되었습니다.

data-main에 지정된 스크립트 요청에 내가 계산 한 해시를 강제로로드하려면 어떻게해야합니까? 마크 업이 생성되고 있으므로 HTML 문서 어디에서나 해시를 삽입 할 수 있습니다.

+0

가능한 중복 (http://stackoverflow.com/questions/8315088/prevent-requirejs-from-caching-required-scripts) – kryger

+0

@kryger, I us 과거에이 기술을 사용하여 비 기본 스크립트에서 캐싱 문제를 피할 수있었습니다. 그러나 RequireJS 스크립트가 실행되기 전에 실행되도록 config에 HTML에 직접 포함시키지 않으면 config가'data-main'에서 스크립트로드에 영향을 미치지 않습니다. 이 질문은 관련이 있지만 약간 미묘하게 다르며 실제로이 질문을하기 전에 다른 질문을 읽습니다. 희망적으로 이것은 다른 누군가를 도울 것입니다. –

답변

3

트릭은 urlArgs 구성 설정을 사용하는 것입니다. 그래서,이 예제의 코드는 유사합니다

<script> 
require = { 
    urlArgs: 'md5=ABCD' 
}; 
</script> 
<script src="lib/require.js" data-main="app/main.js"></script> 

당신이이 require.js 라이브러리를로드하기 전에 글로벌 require 객체 를 정의해야합니다.

시작할 때 RequireJS 다음 코드를 실행하기 때문에이 작동

(v2.1.10의 같은 라인 unminified 소스의 190 참조)

//Allow for a require config object 
if (typeof require !== 'undefined' && !isFunction(require)) { 
    //assume it is a config object. 
    cfg = require; 
    require = undefined; 
} 

하는 브라우저의 개발 도구를 확인하고 표시되어야하여 쿼리 문자열에 인수 :

enter image description here

[캐싱 필수 스크립트에서 방지 RequireJS]의
+0

문제는 urlArgs를 동 기적으로로드하는 동안 data-main이 비동기 적으로로드된다는 것입니다. 설정이 설정되기 전에 slim chance main.js가로드되지만, 여전히 하드 코딩 된 가정입니다. 나는 여전히 데이터 메인에서 쿼리 문자열 인수를 얻는 방법을 알고 싶다. ( – TruMan1

+0

@ TruMan1, 맞아. 경쟁 조건을 제거하는 코드로 내 대답을 업데이트했다. –

관련 문제