RequireJS 용법 해석

19413 단어 작은 플러그 인
1. 개술
requirejs 에 대한 설명:
RequireJS 는 아주 작은 JavaScript 모듈 불 러 오 는 프레임 워 크 로 AMD 규범 의 가장 좋 은 실현 자 중 하나 입 니 다.최신 버 전의 RequireJS 압축 후 14K 에 불과 해 매우 가볍다 고 할 수 있다.또한 다른 프레임 워 크 와 협동 하여 작업 할 수 있 으 며, RequireJS 를 사용 하면 전단 코드 의 질 을 향상 시 킬 수 있다.
주요 특징:
  • 비동기 로드 모듈
  • 의존 순서에 따라 불 러 오기
  • 모듈 은 선행
  • 에 의존한다.
    2. define 과 require
    전체 require 에서 주요 한 방법 은 require 와 define 이다.
    (1) define 정의 모듈
    함수 방법:
    define(id?, dependencies?, factory)
    

    모두 세 개의 인자 가 있 습 니 다. id 가 정의 하 는 모듈 이름 은 보통 config 에서 정의 합 니 다.dependencies 가 필요 한 의존 모듈;factory 를 정의 하 는 모듈 입 니 다.그 중에서 factory 는 필수 이 고, 다른 두 개 는 필수 항목 이 아니다.위의 매개 변수 설정 을 통 해 알 수 있 듯 이 define 는 모두 두 가지 로 나 뉘 는데 첫 번 째 는 독립 모듈 로 다른 모듈 에 의존 하지 않 습 니 다.두 번 째 는 비 독립 모듈 로 다른 모듈 에 의존 해 야 한다.주: define 정의 모듈 은 대상 에 국한 되 지 않 고 모든 값 을 되 돌려 줍 니 다.
    독립 모듈
    하나의 대상 을 통 해 간단 한 정의:
    define({
        name: "aimee",
      	method1: function() {},
        method2: function() {}
    })
    

    * 주: 이렇게 정 의 된 대상 이 여러 곳 에서 인용 되면 인용 한 곳 은 이 대상 의 인용 을 공유 합 니 다.다른 하 나 는 하나의 함 수 를 통 해 던 전 대상 모듈 을 정의 합 니 다:
    define(function () {
        //Do setup work here
        return {
    	    name: "aimee",
    	  	method1: function() {},
    	    method2: function() {}
    	}
    })
    

    이런 자유도 가 더욱 높 아서 함수 에서 다른 논 리 를 처리 할 수 있다.
    비 독립 모듈 은 의존 모듈 을 도입 하여 다른 모듈 에 불 러 오고 자신의 모듈 을 정의 해 야 합 니 다. 이때 돌아 오 는 method 방법 에는 모듈 1 과 모듈 2 의 함수 호출 이 포함 되 어 있 습 니 다.
    define(['module1', 'module2'], function(m1, m2) {
        return {
            method: function() {
                m1.methodA();
    			m2.methodB();
            }
        }
    })
    

    여러 개 를 정의 할 때 function 함수 에서 require 기본 매개 변 수 를 받 아들 여 처리 할 수 있 습 니 다.
    define(
        [       'dep1', 'dep2', 'dep3', 'dep4', 'dep5', 'dep6', 'dep7', 'dep8'],
        function(dep1,   dep2,   dep3,   dep4,   dep5,   dep6,   dep7,   dep8){
            ...
        }
    );
    

    이렇게 써 도 돼 요.
    define(
        function (require) {
            var dep1 = require('dep1'),
                dep2 = require('dep2'),
                dep3 = require('dep3'),
                dep4 = require('dep4'),
                dep5 = require('dep5'),
                dep6 = require('dep6'),
                dep7 = require('dep7'),
                dep8 = require('dep8');
    
                ...
        }
    })
    

    (2) require 호출 모듈
    define 을 통 해 모듈 을 정의 한 후 require 를 사용 하여 모듈 을 호출 할 수 있 습 니 다.
    require(dependencies?, factory, errorCallback)
    

    require 의 매개 변 수 는 dependencies 가 모듈 에 의존 하기 때문에 필수 가 아 닙 니 다.factory 처리 함수, 필수;error Callback 은 잘못된 리 셋 입 니 다. 필요 하지 않 습 니 다.
    require(
    	['foo', 'bar'], 
    	function ( foo, bar ) {
            foo.doSomething();
            bar.doSomething();
    	}function(err){
    		console.log(err)
    	}
    );
    

    상기 예 를 들 어 foo 와 bar 모듈 로 딩 이 끝 난 후에 함수 에서 foo 와 bar 를 실행 하 는 방법 입 니 다. 오류 가 있 으 면 잘못된 리 셋 함수 에 가서 error 대상 을 매개 변수 로 받 아들 입 니 다.
    전역 error 이벤트 감청, 위의 방법 으로 포착 되 지 않 은 모든 오류 가 이 감청 함 수 를 촉발 합 니 다.
    requirejs.onError = function (err) {
        // ...
    };
    

    define 에서 require 비동기 로드
    예 를 들 어 define 은 모듈 을 정 의 했 습 니 다. 그 중에서 foobar 는 foo 와 bar 모듈 에 의존 하 는 방법 이 필요 합 니 다. require 는 비동기 이기 때문에 이때 return 의 결 과 는 isReady 를 통 해 불 러 올 지 여 부 를 판단 할 수 있 습 니 다.
    define(function ( require ) {
        var isReady = false, foobar;
     
        require(['foo', 'bar'], function (foo, bar) {
            isReady = true;
            foobar = foo() + bar();
        });
     
        return {
            isReady: isReady,
            foobar: foobar
        };
    });
    

    promise 로 이 루어 질 수 있어 요.
    define(function ( require ) {
        var obj;
     
        require(['foo', 'bar'], function (foo, bar) {
            isReady = true;
            obj.resolve({foobar:foo() + bar()});
        });
     
        return obj.promise()
    });
    

    위의 코드 는 promise 대상 을 되 돌려 줍 니 다. 이 대상 의 then 방법 으로 다음 동작 을 지정 할 수 있 습 니 다.
    소결 require 와 define 함수 내부 메커니즘 의 차이 가 많 지 않 습 니 다. 다른 점 은 define 의 리 턴 함수 입 니 다. return 문 구 를 모듈 대상 으로 되 돌려 야 define 가 정의 하 는 모듈 이 다른 모듈 에 의 해 인 용 될 수 있 습 니 다.require 의 반전 함 수 는 return 문 구 를 필요 로 하지 않 습 니 다.
    3. requirejs config 설정
    paths: 모듈 의 인용 경 로 를 설정 할 수 있 습 니 다. 로 컬 상대 경로 일 수도 있 고 외부 경로 일 수도 있 습 니 다. 여러 경 로 를 제공 할 수 있 습 니 다. 첫 번 째 가 실 패 했 을 때 두 번 째 경 로 를 사용 합 니 다.간단 한 설정 은 다음 과 같 습 니 다.
    require.config({
        paths: {
            jquery: [
                '//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js',
                'lib/jquery'
            ]
        }
    });
    

    baseUrl: baseUrl 에서 디 렉 터 리 를 지정 한 다음 requirejs 는 이 디 렉 터 리 를 기반 으로 의존 하 는 모듈 을 찾 습 니 다.config 를 통 해 설정 할 수도 있 고 requirejs 파일 의 data - main 속성 정 의 를 도입 할 수도 있 습 니 다.
    shim: 스 크 립 트 / 모듈 밖 에 설정 할 때 RequireJS 함수 의존 을 사용 하지 않 고 함 수 를 초기 화 합 니 다.underscore 가 RequireJS 정 의 를 사용 하지 않 았 다 고 가정 하지만 RequireJS 를 통 해 사용 하려 면 설정 에서 shim 으로 정의 해 야 합 니 다.
    <script src="js/require.js" data-main="js/main.js"></script>
    

    혹은
    requirejs.config({
    	baseUrl: 'js'
    });
    

    4. 플러그 인
    requirejs 는 다양한 플러그 인 을 제공 합 니 다. 구체 적 인 플러그 인 정 보 는 문서 플러그 인 형식 을 볼 수 있 습 니 다.
    define([
        'backbone',
        'text!templates.html'
    ], function( Backbone, template ){
       // ...
    });
    

    이상 은 text 플러그 인 입 니 다. 모듈 이름 앞 에 text 를 추가 합 니 다!플러그 인 형식 을 지정 합 니 다. 리 셋 함수 에서 템 플 릿 을 통 해 템 플 릿 의 내용 을 가 져 올 수 있 습 니 다. 형식 은 문자열 입 니 다.
    5. 최적화 기 r. js
    requireJS 는 node. js 기반 명령 행 도구 r. js 를 제공 하여 여러 개의 js 파일 을 압축 합 니 다.웹 페이지 의 HTTP 요청 수 를 줄 이기 위해 여러 모듈 파일 을 하나의 스 크 립 트 파일 로 압축 하 는 것 이 주요 역할 이다.구체 적 실현 은 공식 문 서 를 참고 할 수 있다.
    참고:
    공식 문서 api: requirejs. org 공식 문서 git: requirejs - git

    좋은 웹페이지 즐겨찾기