2013-03-27 3 views
0

나는 내가 작성한 오픈 소스 JavaScript 양식 유효성 라이브러리가 있습니다. 최근 한 기여자가 내 라이브러리를 수정하여 AMD를 지원했습니다. 지난 한 두 달 동안, 저는 유지 보수성, 모듈성 및 가독성을 높이기 위해 라이브러리를 리팩토링했습니다. 필자는 본질적으로 논리 조각을 자체 내장 모듈로 추출했습니다. 그러나 이러한 모듈은 모두 주 모듈 안에 있습니다.RequireJS 및 AMD를 사용하여 내부 종속성이 포함 된 프로젝트 배포

AMD가 어떻게 작동하는지 살펴 본 후에, 이러한 내부 모듈을 개별 파일로 분리 할 수 ​​있다면 도움이 될 것이라고 생각합니다. 나는 자바 배경에서 왔고, 그 관점에서 볼 때,이 개별 모듈들은 나에게 수업과 같이 보이고, 나는 그것들을 분리하고 싶다. 이것은 또한 내 의존성을 더 잘 관리하고 적절한 모듈성을 강화하는데도 도움이 될 것입니다. 나는 장기적으로 이것이 코드를 훨씬 더 좋게 만들 것이라고 생각한다.

필자는 RequireJS가 모든 종속성을 단일 파일로 결합하고 최소화하는 "최적화"기능을 가지고 있음을 알고 있습니다.

제 질문은 이것입니다 :이 축소 파일도 AMD와 호환됩니까? 즉, 파일 자체가 AMD 모듈로 노출됩니까? 프로젝트 자체가 가지고있는 의존성은 모두 내부적이므로 별도로 노출하고 싶지 않습니다. 그러나 개발자가 내 라이브러리를 독립형 모듈로 가져올 수 있기를 바랍니다.

답변

1

이 축소 파일도 AMD와 호환됩니까? 즉, 파일 자체가 AMD 모듈로 노출됩니까?

Require.js는 AMD 호환 모듈을 생성 할 필요가 없습니다. 라이브러리 AMD 호환 가능해야합니다. main 파일에서 발생합니다. 당신은 그것을하는 방법 lowdash에서 그것을 배울 수 있습니다. 그들은 Node와 Require.js와 호환되는 라이브러리를 만들었습니다. 그들은 기본적으로 Node와 Require를 탐지하기 위해 전역 변수를 찾고 있습니다. 끝에

/** Detect free variable `exports` */ 
    var freeExports = typeof exports == 'object' && exports; 

    /** Detect free variable `module` */ 
    var freeModule = typeof module == 'object' && module && module.exports == freeExports && module; 

    /** Detect free variable `global` and use it as `window` */ 
    var freeGlobal = typeof global == 'object' && global; 
    if (freeGlobal.global === freeGlobal) { 
    window = freeGlobal; 
    } 

:

// if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { 
    // Expose Lo-Dash to the global object even when an AMD loader is present in 
    // case Lo-Dash was injected by a third-party script and not intended to be 
    // loaded as a module. The global assignment can be reverted in the Lo-Dash 
    // module via its `noConflict()` method. 
    window._ = _; 

    // define as an anonymous module so, through path mapping, it can be 
    // referenced as the "underscore" module 
    define(function() { 
     return _; 
    }); 
    } 
    // check for `exports` after `define` in case a build optimizer adds an `exports` object 
    else if (freeExports && !freeExports.nodeType) { 
    // in Node.js or RingoJS v0.8.0+ 
    if (freeModule) { 
     (freeModule.exports = _)._ = _; 
    } 
    // in Narwhal or RingoJS v0.7.0- 
    else { 
     freeExports._ = _; 
    } 
    } 
    else { 
    // in a browser or Rhino 
    window._ = _; 
    } 
+0

내 라이브러리 (https://raw.github.com/vivin/regula/master/src/regula.js) 소스 [여기]. 나는 그것이 현재 AMD와 호환된다고 믿습니다. 내면의 모듈을 AMD 파일과는 별도의 파일로 분리하려고합니다. RequireJS로 최적화 할 때 (다른 모든 모듈을 포함하는) 축소 된 파일도 AMD와 호환됩니까? –

+0

명시 적으로 '정의'하면 '예'입니다. 그것은 AMD와 호환 될 것입니다. – Mohsen

+0

굉장해! 고맙습니다! –

관련 문제