3

가 나는 전역에 자신을 추가하는 방법, 특히 store.js의 소스 코드를 살펴 가졌다 : 전역 범위에 JavaScript 모듈을 추가하는 플랫폼 간 플랫폼이란 무엇입니까?

if (typeof module != 'undefined') { module.exports = store } 
else if (typeof define === 'function' && define.amd) { define(store) } 
else { this.store = store } 

내가 마지막 문 this.store = store을 이해하지만, 어떻게 다른 사람에 대한? moduledefine 함수는 무엇입니까? this.store = store가 이미 모든 브라우저에서 작동하지 않습니까?

더 일반적으로, 전역 범위에 모듈을 추가하는 올바른 브라우저 간 방법은 무엇입니까?

답변

4

첫 번째 경우는 CommonJS이고 Node.js에서 가장 많이 사용되며 AMD (Asynchronous Module Definition)의 맛입니다. 모듈은 정의 된 전역 모듈 객체로 실행되는 JavaScript 파일입니다. 파일이 module.exports으로 설정 되더라도 앱의 다른 부분에서 사용할 수 있으며 파일의 다른 모든 항목은 해당 모듈에만 공개됩니다. 여기에 good blog post이 있습니다.

두 번째 것은 AMD의 또 다른 맛입니다. 가장 일반적으로는 requirejs으로 구현됩니다. CommonJs와 매우 유사한 개념이지만 브라우저에서보다 일반적으로 발견됩니다. Dojo 프레임 워크는 amd 기반 프레임 워크의 좋은 예입니다. Jquery 커뮤니티도 많이 뒤지고있다. define은 amd 시스템에 나머지 응용 프로그램이 require을 사용하여 가져올 수있는 모듈을 제공한다고 알립니다.

최종 버전은 일반 제인 브라우저에서 실행하는 일반적인 시나리오입니다. this이 DOMWindow 일 가능성이 높으므로 저장소 객체는 전체 웹 페이지에서 전역으로 나타납니다.