node.js 의 exports,module.exports 와 ES6 의 export,export default 깊이 있 게 설명 합 니 다.

머리말
최근 모처럼 시간 이 나 서 node 프로 그래 밍 을 다시 규범화 하기 로 했다.그러나 도입 모듈 은 require 방식 으로 우리 의 ES6 각종 export,export default 를 연상 하 는 것 을 보 았 다.
아 시 죠?머리 가 커 졌 는데...................................................
머리 가 다 컸 으 니 앉 아서 먼저 그들의 사용 범 위 를 정리 하 자.
  • require:node 와 es6 가 모두 지원 하 는 도입
  • export/import:es6 만 지원 하 는 내 보 내기 도입
  • module.exports/exports:node 만 지원 하 는 내 보 내기
  • 이 순간 부터 나 는 그들 사이 의 관 계 를 모두 정리 해 야 한다 고 생각한다.그렇지 않 으 면 나 는 혼 란 스 러 워 죽 을 것 이다.말 이 많 지 않 으 니,우리 시작 합 시다!!
    노드 모듈
    Node 안의 모듈 시스템 은 CommonJS 규범 을 따른다.
    그 문제 가 또 왔 습 니 다.무엇이 CommonJS 규범 입 니까?
    js 가 예전 에 혼 란 스 러 웠 기 때문에 각 코드 를 썼 고 모듈 의 개념 이 하나 도 없 었 다.이 규범 은 바로 모듈 에 대한 정의 이다.
    CommonJS 가 정의 하 는 모듈 은 모듈 표지(module),모듈 정의(exports),모듈 참조(require)로 나 뉜 다.
    exports 와 module.exports 를 먼저 설명 합 니 다.
    node 에서 파일 을 실행 할 때 이 파일 에 exports 와 module 대상 을 생 성 합 니 다.
    모듈 에는 exports 속성 이 하나 더 있 습 니 다.그들 사이 의 관 계 는 다음 그림 과 같 습 니 다.{}메모리 영역 을 가리 키 고 있 습 니 다.
    
    exports = module.exports = {};

    그럼 코드 를 살 펴 보 겠 습 니 다.
    
    //utils.js
    let a = 100;
    
    console.log(module.exports); //       :{}
    console.log(exports); //       :{}
    
    exports.a = 200; //        module.exports        {a : 200}
    
    exports = '       '; //   exports     
    
    //test.js
    
    var a = require('/utils');
    console.log(a) //     {a : 200} 
    위 에서 알 수 있 듯 이 require 내 보 낸 내용 은 module.exports 가 가리 키 는 메모리 블록 내용 이지 exports 가 아 닙 니 다.
    한 마디 로 하면 이들 의 차 이 를 구분 하 는 것 은 exports 가 module.exports 의 인용 일 뿐 후자 가 내용 을 추가 하 는 데 사용 하 는 것 을 보조 하 는 것 이다.
    백화 로 말하자면 exports 는 module.exports 가 메모리 에 있 는 데 이 터 를 보조 하 는 것 입 니 다.여러 가지 조작 데이터 가 끝나 고 지 쳐 죽 을 지경 입 니 다.결국 정말 require 에 의 해 나 간 내용 은 module.exports 입 니 다.정말 힘 들 었 습 니 다.
    사실 모두 가 메모리 블록 이라는 개념 으로 이해 하면 잘 알 수 있 을 것 이다.
    그리고 헷 갈 리 지 않도록 module.exports 로 내 보 내 고 require 로 가 져 옵 니 다.
    ES 모듈 내 보 내기 가 져 오기
    솔직히 es 의 모듈 은 매우 뚜렷 하 다.하지만 자세 한 것 도 알 아야 할 것 이 있 습 니 다.
    예 를 들 어 export 와 export default,그리고 가 져 올 때 import a from..,import{a}from.............................................................
    export 와 export default
    우선 우 리 는 이 두 가지 도 출 을 이야기 하고,다음은 그들의 차 이 를 이야기 합 시다.
  • export 와 export default 는 상수,함수,파일,모듈 등 을 내 보 내 는 데 사용 할 수 있 습 니 다
  • 한 파일 이나 모듈 에서 export,import 는 여러 개 를 가 질 수 있 고 export default 는 하나 밖 에 없다
  • export 방식 으로 내 보 냅 니 다.가 져 올 때{}을 추가 하고 export default 는 필요 하지 않 습 니 다
  • export 는 변수 표현 식 을 직접 내 보 낼 수 있 습 니 다.export default 는 안 됩 니 다
  • 다음은 코드 를 보고 검증 해 보 자.
    testEs6Export.js
    
    'use strict'
    //    
    export const a = '100'; 
    
     //    
    export const dogSay = function(){ 
     console.log('wang wang');
    }
    
     //       
    function catSay(){
     console.log('miao miao'); 
    }
    export { catSay };
    
    //export default  
    const m = 100;
    export default m; 
    //export defult const m = 100;//          。
    index.js
    
    //index.js
    'use strict'
    var express = require('express');
    var router = express.Router();
    
    import { dogSay, catSay } from './testEs6Export'; //    export    
    import m from './testEs6Export'; //    export default 
    
    import * as testModule from './testEs6Export'; //as        
    
    
    
    /* GET home page. */
    router.get('/', function(req, res, next) {
     dogSay();
     catSay();
     console.log(m);
     testModule.dogSay();
     console.log(testModule.m); // undefined ,    as           export            , export default      default  。
     console.log(testModule.default); // 100
     res.send('   ,    ');
    });
    
    module.exports = router;
    위 에서 보 듯 이 ES6 의 모듈 시스템 이 매우 유연 하 다 고 느 꼈 다.
    코드 주소
    GitHub: https://github.com/XuXiaoGH/exportImportTest
    로 컬 다운로드:http://xiazai.jb51.net/201710/yuanma/exportImportTest(jb51.net).rar
    참고 문헌
    1. 고목 새싹,ES6 에서 Express 사용
    2. exports 와 module.exports 의 차이
    3. module.exports 와 exports,export 와 export default 간 의 관계
    이 세 선배 님 의 나 눔 에 감 사 드 립 니 다.
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기