2014-11-04 8 views
2

을의 이름과하는 것은 그들이 AMD 호환되도록하는 관련 코드입니다.모듈 아래 우리는 내가 모두 (<a href="https://github.com/amdjs/" rel="nofollow">https://github.com/amdjs/</a>)에 대한 AMD 호환 라이브러리에보고했다 BackboneJS 및 UnderscoreJS <p></p>의 AMD 호환 버전을 사용할 수 있습니다 RequireJS

백본 JS (AMD);

else if (typeof define === 'function' && define.amd) { 
// AMD 
define(['underscore', 'jquery', 'exports'], function(_, $, exports) { 
// Export global even in AMD case in case this script is loaded with 
// others that may still expect a global Backbone. 
root.Backbone = factory(root, exports, _, $); 
}); 

언더 코어 인 (AMD);

// AMD define happens at the end for compatibility with AMD loaders 
// that don't enforce next-turn semantics on modules. 
if (typeof define === 'function' && define.amd) { 
define('underscore', function() { 
return _; 
}); 
} 

이제이 AMD 호환 라이브러리를 코드에서 사용합니다.

requirejs.config({ 
    enforceDefine: true, 
    paths: { 
     "jquery": "libs/jquery-1.8.3", 
     "underscore": "libs/underscore-amd", 
     "backbone": "libs/backbone-amd" 
    } 
}); 

는 지금은 백본 모듈의 이름은 무엇이든 할 수 있다는 것을 읽을 수 있지만 밑줄의 이름은 "밑줄"와 밑줄를 들어, 총액이 중요합니다.

왜 라이브러리가 정의되었는지에 따라 차이점을 이해할 수 없습니다.

나에게도 똑같이 설명해 주시겠습니까?

답변

2

define 함수는 정의 할 모듈의 이름과 함께 또는없이 호출 할 수 있습니다. 이 호출에는 모듈 이름이 없습니다. 그것은 의존성의 배열로 시작

define(['underscore', 'jquery', 'exports'], function(_, $, exports) { 

RequireJS가 define가 표시하거나 paths 구성에서 지정한 이름에 근거하는 파일의 기본 이름에 기초하여 모듈 이름을 지정합니다. paths: { platypus: '... path to file' }을 입력하면 모듈의 이름은 platypus이됩니다. underscore

define('underscore', function() { 

이 이름 모듈 :

이 호출 모듈 이름이 있습니다. 첫 번째 인수는 배열이 아니므로 RequireJS가 모듈 이름으로 해석합니다. 그리고 이름을 define으로 설정하면 변경되지 않습니다. 따라서 의존성으로 넣을 때 underscore이라고해야합니다. (이름을 다시 매핑하기 위해 RequireJS 설정에서 map을 사용할 수 있지만 궁극적으로 모듈 이름은 underscore으로 고정됩니다.)이 모듈을 사용하여 위의 platypus 예제를 시도한 경우 RequireJS는 underscore이라는 모듈을 찾을 수 있기 때문에 오류를 생성합니다 platypus으로 명명되었습니다. 그렇게 할 수있는 명시 적상당한 이유없이 define 통화에서 모듈 이름을 지정

나쁜 관행입니다. RequireJS recommends에 대한 설명서가 없습니다.

[즉, 모듈 이름]은 일반적으로 최적화 도구에 의해 생성됩니다. 명시 적으로 모듈의 이름을 지정할 수는 있지만 모듈을 덜 이식성있게 만듭니다. 파일을 다른 디렉토리로 이동하면 이름을 변경해야합니다. 일반적으로 모듈 이름으로 코딩하는 것을 피하고 최적화 도구로 모듈 이름을 구울 수 있습니다. 최적화 도구는 파일에 둘 이상의 모듈을 묶어서 브라우저에서 더 빠르게로드 할 수 있도록 이름을 추가해야합니다.

+1

그래서 순서/순서는 다음과 같습니다. 모듈 이름이 define() (백본이라고 말함)을 통해 모듈 내에 정의되지 않은 경우 ... 정의 된대로 이름이 지정됩니다. (requirejs.config()를 수행하는 동안) – testndtv

+0

예, 작동 방식입니다. – Louis