2014-07-10 3 views
4

종속성을로드하기 위해 요구 사항을 사용하는 웹 응용 프로그램이 있습니다. Require config.shim 개체를 사용하여 포함 된 JS 라이브러리 집합이 있습니다.Require.js 최적화 프로그램이 shim 의존성을 잘못 주문했습니다.

두 예 라이브러리는 다음과 같습니다

require.config({ 
    shim: { 
    "libs/leaflet": { 
     exports: "L" 
    } 
    "libs/leaflet-dvf": { 
     deps: ["libs/leaflet"], 
     exports: "L" 
    } 
} 

두 번째 라이브러리, leaflet-dvf 첫 번째, leaflet이 필요합니다. 두 번째는 첫 번째 라이브러리가 정의하는 전역 범위 변수 L에 따라 달라지는 첫 번째 플러그인입니다.

정상적으로 요구를 사용하여 응용 프로그램을 실행할 때 모든 것이 정상적으로 작동합니다. 심에서 라이브러리를 포함 할 수 있으며 모든 것이 훌륭하게 작동합니다. 아무 문제 없습니다.

이 코드를 r.js 옵티 마이저를 통해 실행하면 문제가 발생합니다. Optimizer는 최적화 된 단일 JS 파일을 빌드 할 때 종속성을 잘못 정렬합니다. 빌드 된 파일에서 leaflet-dvf 코드는 leaflet 코드 앞에옵니다. 종속 플러그인이 필요한 전역 범위 변수 L을 찾을 수 없기 때문에 이로 인해 JS 런타임 오류가 발생합니다. 코뿔소를 사용하여

({ 
    baseUrl: "../js", 
    paths: { 
    "requireLib": "../js/libs/require" 
    }, 
    include: ["requireLib"], 
    name: "Main", 
    out: "bin/Main-built.js", 
    optimize: "none", 
    wrapShim: true 
}) 

나는 최적화를 실행

이, 내 출력 파일을 빌드 : 같은

내 빌드 설정 보인다. Main-built.js 파일에서 플러그인의 코드는 필수 라이브러리 앞에옵니다. 이로 인해 L undefined error이 발생합니다.

최적화 된 JS 파일의 라이브러리 파일을 올바르게 정렬하려면 Optimizer가 내 Shim의 종속성 순서를 준수하도록하려면 어떻게합니까?

+0

중복 가능성 (http://stackoverflow.com/questions/17914786/requirejs-sequential-execution-for-non-amd-js-files) –

+0

이것은 약간 늦지 만 이미이 문제를 해결하지 않았다면 r.js 구성 내부에서 shim을 사용해야합니다. 그걸 고쳐야 해. – Vishwanath

답변

1

녹아웃 확장 기능을 사용하면서 비슷한 문제가 발생했으며 심이 제대로 작동하지 않았습니다. 이것이 우리가 해결 한 방법입니다.

라는 모듈을 만들고 : leafletLib

define(["libs/leaflet","libs/leadleft-dvf"],function(leftlet,dvf){ 

    return leaflet; 
}); 

LeafletLib 메인 라이브러리를 가지고 있으며 모든 확장. 리플릿 또는 리플릿 -Dvf가 종속 모듈 인 경우 leafletLib을 호출합니다. 그것은 일종의 해커지만 그것은 당신을 위해 일할 수도 있습니다.

define(["leafletLib"],function(leafletLib){}); 
[requireJS 비 AMD JS 파일 순차 실행]의
관련 문제