2016-09-29 8 views
1

Require JS API -documentation을 올바르게 읽으려고하는데이 라이브러리를로드 할 수 없으므로 정의되지 않은 것으로 정의되지 않습니다. . NPM-WebJars를 통해이 방법을 사용하고 있습니다. 사용자가 정의하는 방법과 관계가 없습니다.AMD가 지원하지 않는 모듈이있는 RequireJS 구성

기본적으로 내 프로젝트에서 the react-bootstrap-switch -library을 사용하려고합니다. 여기에 JavaScript-file source in Pastebin이 있으므로 마스터 브랜치에서 변경 될 수 있습니다. react-bootstrap-switch는 exports.default = Switch로 라이브러리를 정의합니다. RequireJS를 사용하여 정의 된 몇 가지 다른 모듈이 있습니다.이 모듈은 AMD 지원이 있고 작동합니다. 나는 그것이 작동하지 않습니다 -import 단지 표준 requirejs.config에 따라서 라이브러리

define(['react', 'react-bootstrap-switch'], function(React, Switch){ 
    console.log(Switch); // <- undefined 
} 

를 사용 RequireJS

requirejs.config("paths":{"react-bootstrap-switch":["@routes.WebJarAssets.at("react-bootstrap-switch/15.0.0/dist/js/index")"]}}); // the file location 

을 사용하고 방법은 다음과

이며, AMD 지원의 부족 때문이다. 그래서 나는 shim을 사용해야한다고 생각하지만, 어떻게해야합니까? 나는 그것을 약간 읽었지만 그것을 사용하여 라이브러리를 제대로 가져 오지 못했습니다. 아마도 꽤 쉬운 일 이겠지만 작동하지 않는 것 같습니다. 예를 들어

requirejs.config({ 
      "paths":{"react-bootstrap-switch":["@routes.WebJarAssets.at("react-bootstrap-switch/15.0.0/dist/js/index")"]}, 
      "shim": { 
        "react-bootstrap-switch": { 
          exports: 'Switch' 
         }}}); 

은 정의되지 않은 상태로 둡니다. 나는 init 함수를 사용하여 그 사이에 들어가려고 노력했지만, 올바른 네임 스페이스를 윈도우 안에 위치시킬 수 없다. 또한 '스위치'대신 '기본값'을 시도하는 경로와 다른 트릭을 시도하기 전에 경로를 shimming하는 순서를 전환하려고 시도했지만 정의되지 않은 상태로 인해 제대로 가져 오지 않는 것 같습니다.

내가 할 수있는 마지막 일은 코드를 로컬에서 가져 와서 exports.default 대신 다른 것으로 변경하거나 내 자신의 기능을 코드하는 것입니다. 그러나이 코드를 나중에 참조 할 수 있도록하고 싶습니다.

답변

1

당신이로드하려고하는 것은 분명히 밝혀졌고, CommonJS 환경을 타겟으로하는 파일이었습니다. 이러한 파일은 RequireJS에 의해있는 그대로로드 할 수 없습니다.

처음에는 코드를 define(function (require, exports, module) {으로 끝내고 마지막에는 });으로 코드를 마무리해야합니다. 일단 그렇게하면 일 수 있으며 일 수 있습니다. 랩핑 또는 다른 도구를 수행하려면 r.js을 사용할 수 있습니다.