2012-12-12 2 views
2

내 응용 프로그램에서 JS 모듈을 요구하려면 require.js를 사용하고 있습니다.require.js - URL의 일부로 필수 모듈에 버전을 설정하려면 어떻게해야합니까?

다른 요청 된 URL을 통해 새로운 JS 모듈에서 클라이언트 캐시를 파싱하는 방법이 필요합니다.

즉, hello/there.js 파일이 클라이언트에 이미 캐시 된 경우 브라우저에서 새 파일을 가져 오도록 파일 이름을 변경할 수 있습니다.

, 모듈 hello/there, 나는 클라이언트에서 액세스 할 수있는 버전 문자열에 따라, (그냥 예입니다 다를 수 있습니다 파일 이름)의 URL hello/there___v1234___.js을 요청 require.js 싶습니다 .

그 목표를 달성하는 가장 좋은 방법은 무엇입니까?

+0

그래서 당신은이 파일 이름 서버에 ed "there ___ v1234 ___. js"가 있습니까? – epascarello

+0

서버가 올바른 파일을 제공하도록 rewrite 절을 사용합니다. – Ovesh

답변

1

OK, 나는 당신을 위해 "requirejs 캐시 가슴"을 봤 당신은 단지 부분적인 해결책 인 urlArgs 매개 변수와 함께 requireJS를 구성 할 수 있다고하는, this existing SO answer을 찾았지만, 당신의 즉각적인 요구를 충족하기에 충분 될 수 있습니다.

즉, 캐시 버스트 문제에는 많은 문제가 있으며 많은 "솔루션"이 실제로 문제를 완전히 해결하지는 못합니다. 유지 보수가 가능한 유일하게 유지 보수 가능한 방법 (현재로서는 IMHO)은 Ruby on Rails 자산 파이프 라인이나 연결 자산 또는 서버 측 프레임 워크 선택을위한 동등한 자산 관리 시스템을 사용하는 것입니다. 이들은 각 파일 내용의 체크섬 (일반적으로 MD5 또는 SHA1)을 계산하고 HTML script 태그에 URL로 넣어야하는 파일 이름을 정정 할 수 있습니다. 따라서 버전 번호를 기반으로 수동으로 파일 이름을 변경하는 것을 고민하지 마십시오. 체크섬은 쉽게 자동화되고 완벽하기 때문에 체크섬을 사용하십시오.

내가 말할 수있는 것부터, 상자에서 나오는 requirejs는 캐시 버스트 처리를 할 수 없습니다. this google groups thread을 읽고 싶을 수도 있습니다. 그렇지 않으면 좋은 캐시 버스터 체크섬을 얻으려면 추가 도구/스크립트와 함께 requirej를 쌍으로 만들어야 할 수도 있습니다.

+0

참고로 파일 이름을 수동으로 바꾸지는 않습니다. 서버에 다시 쓰기 기능을 추가하여 버전 문자열없이 파일을 제공합니다. 파일 이름 지정이 여기서 문제가되지는 않지만 require.js를 올바르게 처리하는 방법을 알려 드리겠습니다. 링크 된 포럼 게시물을 살펴 보겠습니다. – Ovesh

+0

아, 그리고 매개 변수를 추가하면 파일이 _never_ 캐시 된 것을 의미하기 때문에 일반적인 requirejs 캐시 버스 팅 솔루션은 나에게 좋지 않습니다. 모든 요청이 아닌 새로운 버전이있을 때 브라우저가 파일을 가져 오도록하고 싶습니다. – Ovesh

+0

실제로 내가 링크 된 답변을 읽었습니까? ? v = 2와 같은 정적 매개 변수를 사용하면 잘 캐시됩니다. –

1

HTML5 상용구에는 ant-build-script의 파일 이름과 정확한 참조 이유 및 can do alot more이 있습니다. 아직 체크 아웃하지 않았다면 체크 아웃 할 가치가 있습니다.

3

나는 urlArgs 솔루션에 대해 좌절감을 느꼈고 결국에는 require.js에 implemented my own fix을 포기했습니다. 이 수정 프로그램은 라이브러리 버전을 기꺼이 수정하려는 경우 이상적인 솔루션을 구현합니다.

현재 패치 볼 수 있습니다

: 당신의 필요 설정에

https://github.com/jbcpollak/requirejs/commit/589ee0cdfe6f719cd761eee631ce68eee09a5a67

추가되면, 당신은 같은 것을 할 수 있습니다 :

var require = { 
    baseUrl: "/scripts/", 
    cacheSuffix: ".buildNumber" 
} 

대체 빌드 시스템이나 서버 환경을 사용하여 개정 ID 또는 소프트웨어 버전이있는 buildNumber이 파일 요청

require(["myModule"], function() { 
    // no-op; 
}); 

일으킬 것입니다 필요 : 사용

는 다음과 같이 요구하는 패치는 프로토콜을 지정하는 모든 스크립트를 무시합니다

http://yourserver.com/scripts/myModule.buildNumber.js 

을하고는 비에 영향을 미치지 않습니다 JS 파일.

서버 환경에서 우리는 URL 재 작성 규칙을 사용하여 buildNumber를 제거하고 올바른 JS 파일을 제공합니다. 이렇게하면 모든 JS 파일의 이름을 바꾸는 것에 대해 실제로 걱정할 필요가 없습니다.

이것은 내 환경에서는 잘 작동하지만 일부 사용자는 접미사가 아닌 접두사를 선호한다는 사실을 알고 있으므로 내 커밋을 사용자의 필요에 맞게 쉽게 수정할 수 있어야합니다. 여기

이 몇 가지 가능한 중복 된 질문입니다 : 그냥 requirejs의 창조자처럼 그것을 할

RequireJS and proxy caching

Prevent RequireJS from Caching Required Scripts

+0

누구나 아파치 2.4에 대한 URL 재 작성 규칙을 게시 할 수 있습니까? 제발 .. – nuthan

관련 문제