programing

Common JS, AMD 및 Require JS와의 관계

kingscode 2022. 10. 2. 21:52
반응형

Common JS, AMD 및 Require JS와의 관계

Common JS, AMD, Require JS는 많이 읽었는데도 잘 모르겠어요.

CommonJs(이전의 ServerJS)는 브라우저 외부에서 언어를 사용할 때 JavaScript 사양(모듈 등)을 정의하는 그룹이라는 것을 알고 있습니다.CommonJS 모듈 사양에는 Node.js 또는 RingoJs 의 구현이 있습니다.

CommonJs, Asynchronous Module Definition(AMD; 비동기 모듈 정의) 및 RequireJs는 어떤 관계가 있습니까?

필요조건JS - 공통 구현JS 모듈 정의?그렇다면 AMD란 무엇입니까?

RequireJS는 AMD API(소스)를 구현합니다.

CommonJS는 모듈 정의 방법으로서exports contentsobject: object: object object object 。 말하면, JS은 다음과합니다.JS 구현은 다음과 같이 동작합니다.

// 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"; };

공통 JS가 필요하다고 되어 있습니다.require(), "Dependency", "Dependency", "Dependencyexports모듈 내용을 내보내는 변수 및 종속성(소스)을 요구하기 위해 사용되는 모듈 ID(이 모듈과 관련된 문제의 모듈 위치를 기술)를 지정합니다.CommonJs에는 앞서 설명한 Node.js다양한 구현이 있습니다.

CommonJS는 브라우저를 염두에 두고 특별히 설계된 것이 아니기 때문에 브라우저 환경에는 적합하지 않습니다(*이러한 소스는 전혀 없습니다.요건을 포함한 모든 장소에서 사용되고 있습니다).JS 사이트*) 비동기 로드 등과 관계가 있는 것 같습니다.

한편, Require는JS는 브라우저 환경(소스)에 적합하도록 설계된 AMD를 구현합니다.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의 정신(주로 모듈 식별자)을 유지하기 위해 노력하고 있습니다.

더욱 혼란스럽게 하기 위해 Require JS는 AMD의 구현이지만공통 JS 래퍼JS 모듈은 Require와 함께 사용하기 위해 거의 직접 가져올 수 있습니다.JS.

define(function(require, exports, module) {
  var someModule = require('someModule'); // in the vein of node    
  exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
});

CommonJS는 그 이상입니다.JavaScript를 위한 공통 API와 생태계를 정의하는 프로젝트입니다.공통의 일부JS는 모듈 사양입니다.Node.js 및 RingoJs는 서버측 JavaScript 런타임이며, 둘 다 Common을 기반으로 모듈을 구현합니다.JS 모듈 사양.

AMD(Asynchronous Module Definition)는 모듈의 또 다른 사양입니다.요구하다JS는 아마 AMD의 가장 일반적인 구현일 것입니다.공통과의 큰 차이점 1개JS는 AMD가 모듈이 비동기적으로 로드되도록 지정하는 것입니다.즉, 로드가 완료될 때까지 기다리는 것으로 실행을 차단하는 것이 아니라 모듈이 병렬로 로드되는 것을 의미합니다.

AMD는 일반적으로 클라이언트 측(브라우저 내) JavaScript 개발에서 더 많이 사용되고 있으며, 일반JS 모듈은 일반적으로 서버 측에서 사용됩니다.단, 어느 환경에서든 모듈 사양을 사용할 수 있습니다(예: Require).JS는 Node.js에서 실행하는 방법을 제공하며 browserify는 공통입니다.브라우저에서 실행할 수 있는 JS 모듈 구현.

간단한 답변은 다음과 같습니다.

CommonJ AMD는 javascript 응용 프로그램에서 모듈 및 그 종속성을 선언하는 방법에 대한 사양(또는 형식)입니다.

RequireJS는 AMD 호환 스크립트 로더 라이브러리이며 curljs도 이에 해당합니다.

CommonJS 준거:

Addy Osmani의 에서 따온 것입니다.

// package/lib is a dependency we require
var lib = require( "package/lib" );

// behavior for our module
function foo(){
    lib.log( "hello world!" );
}

// export (expose) foo to other modules as foobar
exports.foobar = foo;

AMD 준거:

// package/lib is a dependency we require
define(["package/lib"], function (lib) {

    // behavior for our module
    function foo() {
        lib.log( "hello world!" );
    }

    // export (expose) foo to other modules as foobar
    return {
        foobar: foo
    }
});

다른 곳에서 모듈을 사용할 수 있습니다.

require(["package/myModule"], function(myModule) {
    myModule.foobar();
});

일부 배경:

사실 공통JS는 API 선언 그 이상이며 일부만 이를 처리합니다.AMD는 Common에서 모듈 형식의 초안 사양으로 시작되었습니다.JS 목록은 완전한 합의에 이르지 못했고 포맷의 추가 개발은 amdjs 그룹으로 이동했습니다.어떤 포맷이 더 나은지에 대한 논의는 CommonJS가 광범위한 문제를 다루려고 하고 있으며, 동기적인 성질을 감안할 때 서버 측 개발에 더 적합하며 AMD가 클라이언트 측(브라우저) 개발에 더 적합하며, AMD가 Dojo의 모듈 선언문에 뿌리를 두고 있다는 것을 나타냅니다.구현 시.

출처:

견적

AMD:

  • 단일 브라우저 우선 접근법
  • 비동기 동작 및 단순화된 하위 호환성 선택
  • 파일 I/O의 개념은 없습니다.
  • 오브젝트, 함수, 컨스트럭터, 문자열, JSON 및 기타 많은 유형의 모듈을 지원합니다.

공통 JS:

  • 단일 서버 우선 접근법
  • 동기 동작의 가정
  • I/O, 파일 시스템, 약속 등 광범위한 문제를 해결합니다.
  • 래핑되지 않은 모듈을 지원하므로 ES.next/Harmony 사양에 조금 더 가까운 느낌이 들 수 있으므로 다음과 같은 define() 래퍼에서 해방됩니다.AMD제합니니다다
  • 오브젝트만 모듈로 지원합니다.

을 여러 하고 JavaScript를 호출하는 입니다.child-modules main js module.

중요한 것은 자바스크립트가 이것을 제공하지 않는다는 것이다.Chrome과 FF의 최신 브라우저 버전에서는 오늘날에도 사용할 수 없습니다.

그런데 자바스크립트에 다른 자바스크립트 모듈을 호출할 수 있는 키워드가 있나요?

대답은 '아니오'이기 때문에 이 질문은 많은 사람들에게 완전한 세상의 붕괴일 수 있다.


ES5(2009년 출시)에서는 JavaScript에는 Import, include, require 의 키워드가 없습니다.

ES6는 import 키워드(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/import)를 제안하는 2015년에 출시되었으며 현재 모든 최신 브라우저가 이를 지원합니다.

Babel 6.18.0을 사용하고 ES2015 옵션과 함께 전치하는 경우에만

import myDefault from "my-module";

얻을 수 있다require

"use strict";
var _myModule = require("my-module");
var _myModule2 = _interopRequireDefault(_myModule);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

그 이유는require"Node.js" "Node.js" "Node.js" "Node.js" "Node.js" "Node.js" "Node.js."Node.js는 시스템 수준의 파일 읽기부터 모듈로의 래핑 기능까지 모든 것을 처리합니다.

JavaScript에서는 모듈을 나타내는 유일한 래퍼이기 때문입니다.

Common JS와 AMD에 대해 많이 혼란스러워하고 있습니다.

CommonJS와 AMD는 모두 JavaScript의 "결함"을 극복하고 모듈을 스마트하게 로드하는 방법과는 다른 두 가지 기술입니다.

AMD

  • JavaScript 프로젝트를 여러 파일로 확장하기 위해 JavaScript에 도입되었습니다.
  • 주로 브라우저 기반 응용 프로그램 및 라이브러리에서 사용됩니다.
  • 일반적인 구현은 RequireJS, Dojo Toolkit입니다.

공통 JS:

  • 대규모 프로젝트의 많은 기능, 파일, 모듈을 처리하기 위한 사양입니다.
  • 2009년 1월에 Mozilla에 의해 도입된 첫 번째 이름 ServerJs
  • 2009년 8월에 Common으로 개명API의 광범위한 적용 가능성을 보여주는 JS
  • 초기 구현은 서버, nodej, 데스크톱 기반 라이브러리였습니다.

upper.param 파일

exports.uppercase = str => str.toUpperCase()

main.filename 파일

const uppercaseModule = require('uppercase.js')
uppercaseModule.uppercase('test')

요약

  • AMD – 라이브러리의 requires.js에 의해 최초로 구현된 가장 오래된 모듈 시스템 중 하나입니다.
  • CommonJS – Node.js 서버용으로 작성된 모듈시스템
  • UMD – AMD 및 CommonJS와 호환되는 범용 모듈 시스템 1개 추가.

자원:

언급URL : https://stackoverflow.com/questions/16521471/relation-between-commonjs-amd-and-requirejs

반응형