2012-09-24 8 views
18

본질적으로 클라이언트 측에서 사용할 수있는 유용한 JS 인 노드 모듈을 만들었습니다. require.js가 common.js 구성 요소를로드 할 수 있다는 것을 알고 있지만 내 모듈 클라이언트 측을 사용하는 모든 사람에게 require 또는 common.js가 필요하다는 요구 사항을 반드시 작성하고 싶지는 않습니다. 또한 파일의 맨 아래에있는 module.exports = ...을 제거하도록 강요하고 싶지 않습니다. 다른 사람들이이 문제를 어떻게 해결합니까? 오히려 2 개의 버전 또는 2 개의 "컴파일 된"버전을 생성합니까? module.exports는 어디에서나 사용할 수 있습니까?module.exports 클라이언트 측

if (typeof exports !== 'undefined') { 
    if (typeof module !== 'undefined' && module.exports) { 
    exports = module.exports = _; 
    } 
    exports._ = _; 
} else { 
    root['_'] = _; 
} 
+2

내가 아는이 주제에 대한 가장 좋은 설명은 http://www.2ality.com/2011/11/module-gap.html입니다. 저자는 장점/단점 및 개발/배포 모드에 대해 설명합니다. –

답변

16

. '네임 스페이스'를 가정하면 다음 브라우저에서 Node.js를에 require('namespace').my === 'cool' 또는 Namespace.my === 'cool'를 사용할 수있는 클라이언트

(module ? {}).exports = @Namespace = 
    my: 'cool' 
    module: '!' 

window 범위에 주장 할 것입니다.

try { 
    module.exports = exports = MyModule; 
} catch (e) {} 

이 파일은 브라우저와 node.js. 모두 포함 할 수있다 : 이것은 내가이 간단하게 찾을 수

(typeof module !== "undefined" && module !== null ? module : {}).exports = this.Namespace = { 
    my: 'cool', 
    module: '!' 
}; 
+0

아 참아! 멋지다! – Parris

+0

이 코드 부분이 성공적으로 내보내 졌는지 확인하는 방법을 테스트 할 수 있을지 모르겠습니다. – Jun

4

이 나를 (커피 스크립트)를 위해 일했다 : 이것은 underscore.js가하는 일입니다