2014-10-06 2 views
2

인기가있는 r.js의 이점을 이해하려고합니다.r.js는 실제로 무엇을합니까?

  • 수동으로 선택 자바 스크립트 파일의 목록을 연결 ... 것으로 보인다
  • 추하게/
  • 는 CSS 파일 (그들을 결합)
  • 에 대한 몇 가지 유사한 물건을 할 것을 결합 된 코드를 최소화

또한 () 일반 결합/축소 도구와 다른 점은입니다. 것까지 ... AMD 스타일의 모듈

  • 이름을 익명 모듈

    • 변환 노드 스타일 require() 모듈 (예. define(['dependency'], function(){...})
    • 은 로더 플러그인을 일부 지원합니다 (예 : 인라인 CSS 파일은

    하지

    • r.js가 define(["foo"], ...)을 발견해서 패키지로 파일 (같은 포함 파일 foo.js에서 발견 된 종속성을 해결 자동으로 분석하고 ...에 보인다

  • 이 올바른, 아니면 내가 뭔가를 그리워 했습니까?

    +0

    어쩌면 내 편집이 잘못되어 실제로 r.js가 ** define ([ "foo"], ...)을 발견했기 때문에 패키지에 "foo.js"파일을 포함시켜야한다는 것을 의미했습니다. ..) "***"? 코드가 이미 있으면 ('foo'가 정의되어 있습니다.),'foo.js' 파일을로드하는 이유를 알 수 없습니다. – Bergi

    +0

    [RequireJS/Optimization] (http://requirejs.org/docs/optimization.html) : "[r.js] 관련 스크립트를 결합하여 레이어를 만들고이를 축소합니다." 의존성 그래프 자체는 * 실행 시간 *에서 여전히 해결되지만, 모든 모듈은 단순히 함께 압축되어 별도의 리소스 페치가 필요하지 않습니다. – user2864740

    +0

    @Bergi : 편집 내용을 모르지만 예, r.js가 자동으로 의존성을 해결하지 않는지 확인하고 싶습니다. 나는 그렇게해야한다고 말하지는 않습니다. r.js가 JavaScript 구문 분석/처리를 많이하고 그 과정의 모든 단계를 이해하고 있는지 확인하기를 원합니다. –

    답변

    4

    당신이 있기 때문에, 잘못 r.js은 자동으로 종속성을 해결합니다. 당신이 가진 main.js 파일이있는 경우 : 당신이 main.js 중 최적화 된 모듈을 생산 만들 r.js을 요구하는 경우 그 다음

    define(["foo"], function (foo) { 
    }); 
    

    를, 그것은 빌드에 모듈 foo에 대한 코드가 포함됩니다.

    몇 가지주의 사항 :

    1. 그것은 가능한 모듈을 제외 r.js 말할 수 있습니다. 따라서 최적화 된 번들에 있어야한다고 생각되는 모듈이 없다면 모듈이 제외되었을 수 있습니다. (당신은 당신이 r.js 사용하는 방법을 알고 있지만 다른 사람에 의해 생산 된 번들을 사용하고 궁금해하는 경우, 다음이 해답이 될 수 있습니다. 그들은 특별히 빌드에서 종속성을 제외)

    2. r.js하지 않습니다 발견 은 중첩 된 종속성을 지정합니다. 예를 들어 :

      define(function() { 
          require(["foo"], function (foo) { 
          }); 
      }); 
      

      r.js

      당신이 당신의 빌드 설정에 truefindNestedDepencencies를 설정하지 않으면 foo이 필요한 것을 찾을 수 없습니다.
    3. r.js

      requiredefine 통화 종속성을 기대하는 위치에 문자로 배치 문자열 목록의 형태로 지정된 경우에만 종속성을 찾을 수 있습니다. 그래서 만약 당신이 할 : require(deps, ...에 의존성이없는 문자열의 목록으로, 심볼 참조로 표시하기 때문에
      define(function() { 
          var deps = ["foo"]; 
          require(deps, function (foo) { 
          }); 
      }); 
      

      그런 다음 r.jsfoo 종속성 것을 알 수 없습니다. 빌드 구성에서 수동으로 foo을 종속으로 지정해야합니다. 이 경우를 찾기 위해 r.js을 확인하도록 설정할 플래그가 없습니다.

    +0

    감사. 이것은 일을 분명히합니다. –