2013-03-27 1 views
4

면책 조항 : 저는 총 AMD n00b입니다.AMD Optimizer (r.js)가 출력하지 않습니다.

저는 AMD로 변환하려고하는 프로젝트가 있습니다. 원래 모든 코드는 하나의 파일에있었습니다. 기능 단위를 자체 모듈로 나눌 수 있었지만 모두 같은 파일에있었습니다. AMD 모듈로 분할 한 다음 최적화 도구를 사용하여 모든 것을 결합하기로 결정했습니다. 도움이되는 기고가가 이미 내 모듈을 UMD로 변환 했으므로 모든 것을 옮기는 것이 매우 간단 해 보였습니다.

내 주요 파일 (즉, 내가 쓰고 있어요 내 라이브러리)는 다음과 같습니다

(function (root, factory) { 
    if (typeof define === 'function' && define.amd) { 
     // AMD. Register as an anonymous module. 
     define(factory); 
    } else { 
     // Browser globals 
     root.regula = factory(); 
    } 
}(this, function() { 
    define(
     [ 
      "utils/MapUtils", 
      "utils/DOMUtils", 
      "service/BindingService", 
      "service/ExceptionService", 
      "service/ConstraintService", 
      "service/ValidationService", 
      "service/GroupService" 
     ], 
     function (MapUtils, DOMUtils, BindingService, ExceptionService, ConstraintService, ValidationService, GroupService) { 

      ... 
      ... 

      return { 
       configure: configure, 
       bind: bind, 
       unbind: unbind, 
       validate: validate, 
       custom: custom, 
       compound: compound, 
       override: override, 
       Constraint: ConstraintService.Constraint, 
       Group: GroupService.Group, 
       DateFormat: DateFormat, 
       Exception: ExceptionService.Exception 
      }; 
     } 
    ); 
})); 

다음과 같이 내 디렉토리 구조는 다음과 같습니다

regula 
├── amdtest.html 
├── dist 
│   └── src 
└── src 
    ├── build.js 
    ├── domain 
    │   └── CompositionGraph.js 
    ├── jquery.regula.js 
    ├── lib 
    │   ├── closure 
    │   │   └── compiler.jar 
    │   ├── require 
    │   │   ├── require.js 
    │   │   └── r.js 
    │   └── rhino 
    │    └── js.jar 
    ├── parser 
    │   └── Parser.js 
    ├── regula.js 
    ├── service 
    │   ├── BindingService.js 
    │   ├── ConstraintService.js 
    │   ├── ExceptionService.js 
    │   ├── GroupService.js 
    │   └── ValidationService.js 
    └── utils 
     ├── ArrayUtils.js 
     ├── DOMUtils.js 
     └── MapUtils.js 

build.js은 다음과 같습니다

({ 
    appDir: "../", 
    baseUrl: "src", 
    dir: "../dist", 
    modules: [{ 
     name: "regula" 
    }] 
}) 

다음과 같이 Rhino와 Closure를 사용하여 최적화 프로그램을 실행합니다 :

java -cp lib/rhino/js.jar:lib/closure/compiler.jar org.mozilla.javascript.tools.shell.Main lib/require/r.js build.js 

불행히도 이것은 어떤 종류의 출력이나 오류도 발생시키지 않습니다. regula.js에 언급 된 모든 Javascript 모듈도 AMD 모듈입니다. 내가 뭘 잘못하고 있는거야? 도움이된다면 더 많은 정보를 게시 할 수 있습니다. 나는 이전에 언급했듯이, AMD에 관해서는 완전히 새로운 초보자이기 때문에 어떤 것이 관련이 있는지 완전히 모르기 때문에 무작위 정보를 엄청나게 버리고 싶지 않았습니다.

+1

[Require.js optimizer - 문제 해결] (http://stackoverflow.com/questions/15070974/require-js-optimizer-trouble-getting-going) 여기에서 같은 문제가 해결 된 것 같습니다.) [간단히 : r.js에 "-o"플래그가 없습니다.] – kryger

+0

@kryger 굉장! 고맙습니다; 그거였다! 의견을 답변으로 추가하면 동의 할 수 있습니다. –

+0

글쎄, 확실히 최적화 된거야. :-피 – ceejayoz

답변

2

-o 플래그를 r.js 최적화 모드로 실행하는 것을 잊었습니다! official docs