언제 require ()를 사용해야하고 언제 define ()을 사용해야합니까?


316

지난 며칠 동안 requirejs를 가지고 놀았습니다. define과 require의 차이점을 이해하려고합니다.

Define은 모듈 분리를 허용하고 종속성 순서를 준수하는 것으로 보입니다. 그러나 시작하는 데 필요한 모든 파일을 다운로드합니다. 필요할 때 필요한 것만로드하면됩니다.

이 두 가지를 함께 사용할 수 있습니까? 각 목적을 위해 어떤 용도로 사용해야합니까?

답변:


331

함께 define하면 당신이 다음 다른 모듈의 정의에 의존하거나 문을 필요로 할 수 require.js에 모듈을 등록합니다. 함께 require하면 "그냥"로드 / require.js에서로드 할 수있는 모듈이나 자바 스크립트 파일을 사용합니다. 예를 들어 설명서를 살펴보십시오.

내 경험 법칙 :

  • 정의 : 모듈을 선언하려면 응용 프로그램의 다른 부분에 의존합니다.

  • 필요 : 물건을 적재하고 사용하려는 경우.


331

require.js 소스 코드 (1902 행)에서 :

/**
 * The function that handles definitions of modules. Differs from
 * require() in that a string for the module should be the first argument,
 * and the function to execute after dependencies are loaded should
 * return a value to define the module corresponding to the first argument's
 * name.
 */

define()함수는 두 개의 선택적 매개 변수 (모듈 ID 및 필수 모듈 배열을 나타내는 문자열)와 하나의 필수 매개 변수 (공장 방법)를 허용합니다.

팩토리 메소드의 반환은 반드시 모듈 패턴 과 같은 방식으로 모듈의 구현을 반환 해야 합니다 .

require()함수는 새 모듈의 구현을 반환하지 않아도됩니다.

define()당신을 사용하여 "매개 변수로 전달하는 함수를 실행하고 전달중인 ID에 반환 값을 할당하지만 이전에 이러한 종속성이로드되었는지 확인하십시오" 와 같은 것을 묻습니다 .

사용 require()하면 같은 말을 "나는 통과하는 기능은 다음 종속성이를, 이러한 종속성이 그것을 실행하기 전에로드되었는지 확인" .

require()기능은 모듈이 정의되었는지 확인하기 위해 정의 된 모듈을 사용하는 곳이지만 새 모듈을 정의하지는 않습니다.


2
require가 정의 된 모듈 내에서 사용되는지 아니면 외부에서 사용되는지에 대한 차이점이 있습니까? 모듈 내에서 사용되는 경우, require 대신에 모듈 정의에서 요구 사항을 설정하지 않는 이유는 무엇입니까?
Petri

이 답변이 내가 여기 읽은 것과 왜 다른가 ? requirejs.org/docs/api.html#deffunc ??
James Lin

2
@Petri, 모듈을 비동기식으로로드하는 RequireJS의 버전 2 동작이 표시되는 것처럼 들립니다. "RequireJS 2.0은 요청한 호출이 있거나 모듈 에 의존하는 것이 define()있을 때까지 모듈의 팩토리 기능 (에 전달 된 기능)을 실행하지 않습니다 require([])." github.com/jrburke/requirejs/wiki/…
alxndr

2

모듈 정의를 용이하게하기위한 "정의"방법 및 종속성 로딩을 처리하기위한 "필수"방법

define은 다음 서명을 사용하여 제안을 기반으로 명명 된 또는 명명되지 않은 모듈을 정의하는 데 사용됩니다.

define(
module_id /*optional*/, 
[dependencies] /*optional*/, 
definition function /*function for instantiating the module or object*/
);

반면에 require는 일반적으로 의존성을 동적으로 가져 오려면 최상위 JavaScript 파일 또는 모듈 내에서 코드를로드하는 데 사용됩니다

자세한 내용은 https://addyosmani.com/writing-modular-js/ 를 참조하십시오.


2

일반적인 규칙:

  1. 재사용 할 모듈을 정의 할 때 define을 사용합니다.

  2. 당신은 단순히 의존성을로드하는 데 필요합니다

    //sample1.js file : module definition 
    define(function() {
          var sample1 = {};
          //do your stuff
         return sample1;
     });
    
    //sample2.js file : module definition and also has a dependency on jQuery and sample1.js
    define(['jquery', 'sample1'], function($,sample1) {
        var sample2 = {
            getSample1:sample1.getSomeData();
        };
        var selectSomeElement = $('#someElementId');
        //do your stuff....
        return sample2;
    });
    
    //calling in any file (mainly in entry file)
    require(['sample2'], function(sample2) {
        // sample1 will be loaded also
    });
    

이것이 도움이되기를 바랍니다.


1

require ()와 define ()은 모두 의존성을로드하는데 사용된다.이 두 방법에는 큰 차이가있다.

아주 간단한 녀석들

Require () : 메소드는 즉각적인 기능을 실행하는 데 사용됩니다. define () : 메소드는 여러 위치에서 재사용 할 모듈을 정의하는 데 사용됩니다 (재사용).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.