ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Javascript CJS (CommonJS)
    Search: Html Css JavaScript Html Css JavaScript 2023. 1. 29. 21:52

     

    ECMA, Ecma International

    ECMAScript, ECMA-262 (javascript)

     

    Kevin Dangoor가 주축으로 기존 Javascript의 문제점 개선을 위해 2009년부터 시작된 프로젝트.

    나열한 Javascript의 문제점.
    - 웹 서버 또는 데이터베이스등을 위한 표준 인터페이스가 없다.
    - Javascript는 모듈 시스템이 없다.
    - Javascript는 표준 라이브러리가 없다.(브라우저 API, date, math만 존재)
    - Javascript는 의존성을 관리하고 설치할 수 있도록 해주는 패키지 관리 시스템이 없다.

    javascript를 브라우저에서만 아니라, 다른 곳에서도 사용할 수 있게 해주는 API.
    Javascript가 웹 브라우저에서 실행되는 것 뿐만 아니라, 범위가 확대되어 백엔드 영역을 포함한 애플리케이션 개발에도 적합한지에 대해 토론이 시작되었다. 파이썬, 자바와 같은 언어의 표준 라이브러리를 따른 API 덕분을 많이 봤다. CommonJS로 인해 서버 사이드 애플리케이션용 자바스크립트, 커맨드 입력 도구, GUI 기반의 데스크톱 및 하이브리드 애플리케이션(Adobe AIR 등) 등 많은 것들이 만들어 졋다.

    Javascript표준 라이브러리가 없다는 문제에 대해서는 path, fs 등이 Node.js에서 내장 API로 제공되도록 결정적인 역할을 하기도 했다.

    CommonJS는 모든 파일이 로컬 디스크에 있어, 필요할 때 바로 불러올 수 있는 상황에서만 사용한다. 브라우저에서 이런 방식을 사용하면, 필요한 모듈이 모두 다운로드될 때까지 아무것도 할 수 없다.

    CommonJS는 동기적인 특징 때문에 서버사이드에 사용하기 용이한 장점이 있다. 그래서 CommonJS는 Node.js에서 채택해 사용하고 있다, 주요 특징 module.exports, exports, require ( 대조적으로 'Javascript ESM (ECMA Script Module)'에서는 import, export가 있다).

     

    module.exports, exports

    문법: module.exports = expression


    'module.exports'의 간단 예제

    //mymodule.js
    const name1 = 'kim1';
    module.exports.name1 = name1;
    const mm = require('./mymodule');
    console.log(mm.name1); //kim1

     

    export는 module.exports를 참조하는 관계.

    console.log(module.exports === exports); // true
    module.exports = 'ow1'
    exports.name1 = 'ow2'
    console.log(module.exports) //ow1

     

    require

    '상대경로'에 있는 파일 중 확장자가 .js, .json, .node 인 module 파일 볼러오는 명령어.
    확장자는 생략 가능하다..



    //mydata.json
    { "name1": "kim3" }
    const name1 = require('./mydata');
    console.log(name1); // { name1: "kim3" }

     


    불러오는 4가지 방식
    - File Modules
    - Folders as Modules
    - node_modules
    - Global Directory

     

    탐색 순서

    순서1. require로 호출하는 경로의 값이 상대경로(./, ../)나 절대경로(/)를 표시되었는가?(아니라면 순서2로 넘어감)
     package.json 파일에 정의된 name과 main의 값으로 시도.
     해당 폴더에 index.js 또는 index.node 파일명으로 시도.
     그래도 실패하면 Cannot find module 에러를 던진다.
    순서2. 순서1의 조건이 아니라면
     module.paths에 정의되어 있는 프로퍼티의 값.
     /home/{win_user}/project/node_modules/{module_name}.js
     /home/{win_user}/node_modules/{module_name}.js
     /home/node_modules/{module_name}.js
     /node_modules/{module_name}.js
    순서3. 그래도 못 찾으면
     OS의 글로벌 파일 경로인 GLOBAL_DIRECTORIES를 탐색
     ( $PREFIX는 Node.js에서 설정한 node_prefix 경로)
     OME/.node_modules
     OME/.node_libraries
     REFIX/lib/node

     

    'Html Css JavaScript' 카테고리의 다른 글

    Babel  (0) 2023.01.29
    Javascript UMD (Universal Module Definition)  (0) 2023.01.29
    Javascript AMD (Asynchronous Module Definition)  (0) 2023.01.29
    Javascript ESM (ECMA Script Module)  (0) 2023.01.29
    ECMAScript, ECMA-262 (javascript)  (0) 2023.01.29
    jquery 선택자 id, class, name  (0) 2023.01.23
    Page Lifecycle API  (0) 2023.01.23
    window unload event  (0) 2023.01.23

    댓글