질문 : CommonJS, AMD 및 RequireJS 간의 관계?
나는 많이 읽은 후에도 CommonJS, AMD 및 RequireJS 에 대해 여전히 매우 혼란 스럽습니다.
CommonJS (이전의 ServerJS )는 언어가 브라우저 외부에서 사용될 때 일부 JavaScript 사양 (예 : 모듈)을 정의하는 그룹이라는 것을 알고 있습니다. CommonJS 모듈 사양에는 Node.js 또는 RingoJS 와 같은 구현이 있습니다.
CommonJS , AMD ( Asynchronous Module Definition ) 및 RequireJS 간의 관계는 무엇입니까?
RequireJS 는 CommonJS 모듈 정의의 구현입니까? 그렇다면 AMD 는 무엇입니까?
답변
RequireJS 는 AMD API (소스)를 구현합니다.
CommonJS 는 모듈 내용을 정의 exports
객체의 도움으로 모듈을 정의하는 방법입니다. 간단히 말해서 CommonJS 구현은 다음과 같이 작동 할 수 있습니다.
// someModule.js
exports.doSomething = function() { return "foo"; };
//otherModule.js
var someModule = require('someModule'); // in the vein of node
exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
기본적으로 CommonJS는 종속성을 가져 오기 require()
exports
변수 및 요구하는 데 사용되는 모듈 식별자 (이 모듈과 관련하여 해당 모듈의 위치를 설명 함)가 필요함을 지정합니다. 종속성 ( 소스 ). CommonJS에는 언급 한 Node.js를 포함한 다양한 구현이 있습니다.
CommonJS는 브라우저를 염두에두고 특별히 설계되지 않았기 때문에 브라우저 환경에 잘 맞지 않습니다 ( 실제로 이에 대한 소스가 없습니다 . RequireJS 사이트를 포함하여 모든 곳에서 그렇게 말합니다.) 비동기 로딩 등으로 할 수 있습니다.
반면에 RequireJS는 브라우저 환경에 맞게 설계된 AMD를 구현합니다 ( source ). 분명히 AMD는 CommonJS Transport 형식의 스핀 오프로 시작하여 자체 모듈 정의 API로 발전했습니다. 따라서 둘 사이의 유사점. AMD의 새로운 기능은 모듈이로드되기 전에 종속성을 선언 할 수 있도록하는 define()
예를 들어 정의는 다음과 같습니다.
define('module/id/string', ['module', 'dependency', 'array'],
function(module, factory function) {
return ModuleContents;
});
따라서 CommonJS와 AMD는 구현이 다르지만 둘 다 동일한 출처에서 온 JavaScript 모듈 정의 API입니다.
- AMD 는 모듈 종속성의 비동기로드를 지원하기 때문에 브라우저에 더 적합합니다.
- RequireJS 는 AMD 의 구현이며 동시에 CommonJS 의 정신을 유지하려고 노력합니다 (주로 모듈 식별자에서).
더 많은 것을 혼동하기 위해 RequireJS는 AMD 구현이면서 CommonJS 래퍼를 제공하므로 CommonJS 모듈을 RequireJS와 함께 사용하기 위해 거의 직접 가져올 수 있습니다.
define(function(require, exports, module) {
var someModule = require('someModule'); // in the vein of node
exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
});
나는 이것이 일을 명확히하는 데 도움이되기를 바랍니다!
출처 : https://stackoverflow.com/questions/16521471/relation-between-commonjs-amd-and-requirejs
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
JavaScript에서 정수 나누기 후 나머지 얻기 (0) | 2021.11.10 |
---|---|
ExpressJS 애플리케이션을 구성하는 방법 (0) | 2021.11.08 |
AngularJS 컨트롤러의 'this'vs $ scope (0) | 2021.11.05 |
Node.js에서 파일을 자동으로 다시로드하는 방법 (0) | 2021.11.05 |
AngularJS의 ng-options에서 값 속성을 설정하는 방법 (0) | 2021.11.05 |