이 글은 2019-2-13 14:04에 Summer가 마지막으로 편집했습니다.
2009년, 미국 프로그래머 라이언 달은 서버 사이드 프로그래밍을 위해 자바스크립트 언어를 사용하는 프로젝트를 node.js 만들었습니다.
이것이 "자바스크립트 모듈러 프로그래밍"의 탄생을 의미합니다. 프론트엔드의 복잡성은 제한적이며, 모듈이 없어도 괜찮지만, 서버 측에서는 운영체제 및 다른 애플리케이션과 상호작용할 수 있는 모듈이 있어야 하며, 그렇지 않으면 전혀 프로그래밍할 수 없습니다.
노드 프로그래밍에서 가장 중요한 아이디어 중 하나는 모듈이며, 이 아이디어가 자바스크립트의 대규모 엔지니어링을 가능하게 합니다. 모듈러 프로그래밍은 JS 세계에서 인기가 있었고, 이를 기반으로 했으며, 브라우저 측에서는 requirejs와 seajs 같은 툴킷도 등장했습니다. 즉, 해당 사양 하에 ES6 이전, 심지어 ES6 모듈이 완전히 구현되기 전에도 모든 모듈러 프로그래밍이 요구가 적용되었습니다.
CommonJS에서는 노출 모듈이 module.exports와 exports를 사용하며, 많은 사람들이 왜 두 개의 노출된 객체가 있는지 이해하지 못합니다. 이 두 개는 나중에 소개될 예정입니다
CommonJS에서는 모듈을 로드하는 데 사용되는 전역 메서드 require()가 있습니다. 수학 모듈이 math.js 있다면 이렇게 불러올 수 있습니다.
그 후 모듈에서 제공하는 메서드들을 호출할 수 있습니다:
CommonJS가 사용한 demand 메서드 때문에 AMD와 CMD가 나중에 모듈 스타일을 지칭하는 데 사용된 require 메서드도 사용됩니다
AMD 규격
서버 사이드 모듈의 경우, 모두가 클라이언트 사이드 모듈을 원하는 것이 자연스럽습니다. 그리고 두 모듈이 호환되어, 서버와 브라우저 모두에서 수정 없이 실행할 수 있는 것이 가장 좋습니다.
하지만 CommonJS 명세가 브라우저 환경에는 적용되지 않는 주요 한계가 있습니다. 그래도 이전 섹션의 코드는 브라우저에서 실행된다면 큰 문제가 생길 것입니다
두 번째 줄의 math.add(2, 3)는 첫 번째 라인 require('math') 다음에 실행되므로 로드가 끝날 때까지 기다려야 math.js 합니다. 즉, 로딩 시간이 길면 앱 전체가 거기서 멈추고 기다립니다.
서버 측에서는 문제가 되지 않는데, 모든 모듈이 로컬 하드 디스크에 저장되어 동기식으로 로드할 수 있고, 대기 시간은 하드 디스크의 읽기 시간과 같기 때문입니다. 하지만 브라우저에게는 큰 문제가 되는데, 모듈이 서버 측에 배치되어 대기 시간이 인터넷 속도에 따라 달라지며, 이는 오랜 시간이 걸릴 수 있고, 브라우저는 '일시 중지된 죽음' 상태에 있기 때문입니다.
따라서 브라우저 측 모듈은 "동기"를 사용할 수 없고, "비동기"만 사용할 수 있습니다. 이것이 AMD 사양의 탄생 배경입니다.
AMD는 "비동기 모듈 정의"의 약자로, "비동기 모듈 정의"를 의미합니다. 모듈을 비동기적으로 로드하며, 모듈의 부하는 이후 명령의 동작에 영향을 주지 않습니다. 이 모듈에 의존하는 모든 문장은 로딩이 완료될 때까지 실행되지 않는 콜백 함수로 정의됩니다.
모듈은 특정 define() 함수로 정의되어야 합니다.
•ID: 문자열, 모듈 이름 (선택 사항) • 의존성: 상대 경로를 사용하여 로드하려는 의존 모듈(선택 사항)입니다. , 배열 형식임을 유의하세요 •공장: 공장 방식, 모듈 함수를 반환합니다 모듈이 다른 모듈에 의존하지 않는다면, define() 함수에서 직접 정의할 수 있습니다.
모듈이 다른 모듈에도 의존한다면, define() 함수의 첫 번째 인자는 모듈의 의존성을 나타내는 배열이어야 합니다.
require() 함수가 위 모듈을 로드할 때, 먼저 파일을 로드Lib.js 것입니다.
AMD는 모듈을 로드할 때 require() 문도 사용하지만, CommonJS와 다르게 두 가지 매개변수가 필요합니다:
첫 번째 매개변수 [모듈]은 배열이며, 그 안의 구성원들은 로드할 모듈입니다; 두 번째 매개변수 콜백은 부하가 성공한 후의 콜백 함수입니다. 이전 코드를 AMD 형태로 다시 작성하면 다음과 같습니다:
Math.add()는 수학 모듈 로딩과 동기화되지 않으며, 브라우저는 일시 중지 상태가 되지 않습니다. 그래서 분명히 AMD가 브라우저 환경에 더 적합합니다.
현재 AMD 사양 :require.js과 curl.js을 구현하는 두 가지 주요 자바스크립트 라이브러리가 있습니다.
|