Nodejs 의 require 함수 의 구체 적 인 사용 방법

9757 단어 Noderequire 함수
설명 하 다.
본 고 는 Node 홈 페이지 문서 버 전 을 참고 하여 v 11.12.0 이다.
본 고 는 Nodejs 에서 require 가 JSON 과 js 파일 을 가 져 올 때 얻 은 결 과 를 분석 하 는 동시에 Nodejs 에서 모듈 내 보 내기 module.exports 와 exports 의 용법 도 간단하게 언급 했다.
머리말
웹 팩 소스 코드 를 읽 는 과정 에서 다음 줄 의 코드 를 볼 수 있 습 니 다.

const version = require("../package.json").version
그래서 Nodejs 에서 require 에 대한 학습 을 파생 시 켰 다.
필요 한 소개
Node.js 문서 에서 require 와 관련 된 문 서 는 Modules 디 렉 터 리 에서 Nodejs 모듈 화 시스템 의 일부분 에 속 합 니 다.
require 는 함수 입 니 다.type:of 또는 Object.prototype.toString.call()을 통 해 이 결론 을 검증 할 수 있 습 니 다.

console.log(require) //   :Function
console.log(Object.prototype.toString.call(require) //   :[object Function]
require 를 직접 인쇄 하면 require 함수 에 몇 개의 정적 속성 이 마 운 트 되 어 있 음 을 알 수 있 습 니 다.이러한 정적 속성 은 Nodejs 의 공식 문서 에서 관련 설명 을 직접 찾 을 수 있 습 니 다.

{ [Function: require]
 resolve: { [Function: resolve] paths: [Function: paths] },
 main:
  Module {
   id: '.',
   exports: {},
   parent: null,
   filename: '/Users/bjhl/Documents/webpackSource/index.js',
   loaded: false,
   children: [],
   paths:
   [ '/Users/bjhl/Documents/webpackSource/node_modules',
    '/Users/bjhl/Documents/node_modules',
    '/Users/bjhl/node_modules',
    '/Users/node_modules',
    '/node_modules' ] },
 extensions:
  [Object: null prototype] { '.js': [Function], '.json': [Function], '.node': [Function] },
 cache:
  [Object: null prototype] {
   '/Users/bjhl/Documents/webpackSource/index.js':
   Module {
    id: '.',
    exports: {},
    parent: null,
    filename: '/Users/bjhl/Documents/webpackSource/index.js',
    loaded: false,
    children: [],
    paths: [Array] } } }

require 함수 정적 속성
여기 서 자세히 보충 하 겠 습 니 다.
require 사용
홈 페이지 문서 에서 다음 과 같은 require 에 대한 설명 을 볼 수 있 습 니 다.
require(id)#  Added in: v0.1.13  id module name or path  Returns: exported module content  Used to import modules, JSON, and local files. Modules can be imported from node_modules. Local modules and JSON files can be imported using a relative path (e.g. ./, ./foo, ./bar/baz, ../foo) that will be resolved against the directory named by __dirname (if defined) or the current working directory.
동시에 세 가지 require 의 사용 방법 도 제시 했다.

// Importing a local module:
const myLocalModule = require('./path/myLocalModule');

// Importing a JSON file:
const jsonData = require('./path/filename.json');

// Importing a module from node_modules or Node.js built-in module:
const crypto = require('crypto');

상기 문서 에서 다음 과 같은 정 보 를 얻 을 수 있 습 니 다.
  • require 는 하나의 인 자 를 받 아들 이 고 형 삼 은 id 이 며 유형 은 String 입 니 다.
  • require 함수 return 은 모듈 곳곳에 있 는 내용 이 고 유형 은 임 의 입 니 다.
  • require 함 수 는 모듈,JSON 파일,로 컬 파일 을 가 져 올 수 있 습 니 다.모듈 은 상대 경 로 를 통 해 nodemodules,로 컬 모듈,JSON 파일 에서 내 보 냅 니 다.이 경 로 는dirname 변수(정 의 된 경우)또는 현재 작업 디 렉 터 리.
  • 실천 이 필요 하 다
    여기 서 require 의 실천 결론 을 분류 하여 토론 할 것 이다.
    JSON 가 져 오기 필요
    JSON 은 대상,배열,수치,문자열,불 값,null 을 직렬 화 하 는 문법 입 니 다.
    글 의 첫머리 에 require("./package.json")파일 을 통 해 package.json 파일 의 version 속성 을 읽 는 것 을 언급 했다.info.json 파일 을 가 져 오고 관련 정 보 를 보 려 고 시도 합 니 다.
    파일 구조 디 렉 터 리 는 다음 과 같 습 니 다.
    
    .
    ├── index.js
    └── info.json
    info.json 파일 의 내용 을 다음 으로 변경 합 니 다.
    
    {
      "name": "myInfo",
      "hasFriend": true,
      "salary": null,
      "version": "v1.0.0",
      "author": {
        "nickname": "Hello Kitty",
        "age": 20,
        "friends": [
          {
            "nickname": "snowy",
            "age": 999
          }
        ]
      }
    }
    
    
    info.json 에는 문자열,불 값,null,숫자,대상 과 배열 이 포함 되 어 있 습 니 다.
    index.js 의 내용 을 다음 과 같이 수정 하고 현재 terminal 에서 명령 node index.js 를 실행 하면 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
    
    const info = require("./info.json")
    console.log(Object.prototype.toString.call(info)) // [object Object]
    console.log(info.version) // v1.0.0
    console.log(info.hasFriend) // true
    console.log(info.salary) // null
    console.log(info.author.nickname) // Hello Kitty
    console.log(info.author.friends) // [ { nickname: 'snowy', age: 999 } ]
    
    
    require 가 JSON 파일 을 가 져 올 때 대상 을 되 돌려 줍 니 다.Nodejs 는 이 대상 의 모든 속성 을 직접 방문 할 수 있 습 니 다.String,Boolean,Number,Null,Object,Array 를 포함 합 니 다.개인 적 으로 JSON.parse()와 유사 한 방법 이 사 용 됐 을 것 으로 추정 된다.
    이 결론 을 통 해 require 방법 을 통 해 JSON 파일 에 전송 하여 일부 값 을 읽 는 방향 도 얻 었 습 니 다.예 를 들 어 글 의 시작 부분 에서 webpackage.json 파일 을 읽 어서 version 값 을 얻 었 습 니 다.
    require 로 컬 js 파일 가 져 오기
    파일 구조 디 렉 터 리 는 다음 과 같 습 니 다.
    
    .
    ├── index.js
    ├── module_a.js
    └── module_b.js
    
    
    index.js 파일 에서 각각 순서대로 module 를 가 져 왔 습 니 다.a 와 moduleb.값 을 부여 한 다음 에 이 두 변 수 를 인쇄 합 니 다.내용 은 다음 과 같 습 니 다.
    
    console.log("*** index.js     ***")
    const module_a = require("./module_a")
    const module_b = require("./module_b")
    console.log(module_a, "***   module_a ***")
    console.log(module_b, "***   module_b ***")
    console.log("*** index.js     ***")
    
    
    module_a 파일 에 module.exports 또는 exports 가 지정 되 지 않 았 으 나 비동기 실행 문 setTimeout 이 추가 되 었 습 니 다.내용 은 다음 과 같 습 니 다.
    
    console.log("** module_a     **")
    let name = "I'm module_a"
    setTimeout(() => {
      console.log(name, "** setTimeout  a    **")
    }, 0)
    console.log("** module_a     **")
    module_b 파일 에 module.exports 가 지정 되 어 있 습 니 다.(exports.name 으로 바 꿀 수도 있 지만 exports 를 직접 사용 할 수 없습니다.exports 와 module.exports 는 사실 주 소 를 가리 키 고 같은 대상 을 참조 하 였 습 니 다.exports 를 사용 하면 다른 인용 유형 과 같 으 면 module.exports 를 가리 키 지 않 고 module.exports 의 내용 을 바 꿀 수 없습니다)내용 은 다음 과 같다.
    
    console.log("** module_b     **")
    let name = "I'm module_b"
    console.log(name, "**   b    **")
    module.exports = {
      name
    }
    console.log("** module_b     **")
    
    
    현재 디 렉 터 리 terminal 에서 node index.js 를 실행 하면 다음 과 같은 출력 을 얻 을 수 있 습 니 다.
    **index.js 실행 시작***
    ** module_a 실행 시작**
    ** module_a 종료 실행**
    ** module_b 실행 시작**
    I am module_b**인쇄 b 의 이름**
    ** module_b.실행 종료**
    {}'**인쇄 모듈a ***'
    { name: 'I am module_b'}'**인쇄 모듈b ***'
    **index.js 실행 종료***
    I am module_a**setTimeout a 이름 인쇄**
    이상 의 집행 결 과 를 통 해 결론 을 얻 을 수 있다.
  • require 의 한 js 파일 이 exports 나 module.exports 를 통 해 내 보 낼 내용 을 지정 하지 않 으 면 require 가 되 돌아 오 는 결 과 는 빈 대상 입 니 다.반대로 module.export 또는 exports 속성 할당 을 통 해 지정 한 내용 을 내 보 낼 수 있 습 니 다.
  • require 의 한 js 파일 이 있 을 때 이 파일 은 즉시 sync 로 실 행 됩 니 다.
  • require 가 져 오기 모듈
    우 리 는 먼저 npm 가방-cors 를 선택 합 니 다.폴 더 에 들 어가 명령 을 실행 합 니 다:
    
    npm init -y //    
    echo -e "let cors = require(\"cors\")
    console.log(cors)" > index.js // index.js npm install cors --save // cors
    파일 구 조 는 다음 과 같 습 니 다(...다른 모듈 은 생략 되 었 습 니 다).
    
    .
    ├── index.js
    ├── node_modules
    │  ├── cors
    │  │  ├── CONTRIBUTING.md
    │  │  ├── HISTORY.md
    │  │  ├── LICENSE
    │  │  ├── README.md
    │  │  ├── lib
    │  │  │  └── index.js
    │  │  └── package.json
    │  │  ...
    ├── package-lock.json
    └── package.json
    index.js 의 내용 은 다음 과 같 습 니 다.
    
    let cors = require("cors")
    console.log(cors)
    node index.js 를 실행 하여 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
    [Function: middlewareWrapper]
    node 찾기modules 아래 의 cors 모듈 폴 더,cros 모듈 의 package.json 파일 을 관찰 하고 main 필드 를 찾 습 니 다:"main":"./lib/index.js",main 필드 가 가리 키 는 파일 을 찾 았 습 니 다.이것 은 IIFE 입 니 다.IIFE 의 코드 에"console.log"를 추가 합 니 다.아 날로 그 코드 구 조 는 다음 과 같 습 니 다.
    
    (function () {
      'use strict';
      console.log("hello cors"); //          
      ...
      function middlewareWrapper(o) {
        ...
      }
      module.exports = middlewareWrapper;
    })()
    
    
    node index.js 를 다시 실행 하여 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
    hello cors
    [Function: middlewareWrapper]
    왜 hello cors 를 출력 했 을까요?require 모듈 을 사용 할 때 이 모듈 package.json 파일 에서 main 필드 가 가리 키 는 파일 을 도입 하기 때 문 입 니 다.이 js 파일 은 자동 으로 실 행 됩 니 다.require 가 로 컬 js 파일 을 참조 하 는 것 과 같 습 니 다.
    packjson 문서
    npm 공식 사이트 에서 package.json 의 main 필드 정 의 를 찾 을 수 있 습 니 다.
    main   The main field is a module ID that is the primary entry point to your program. That is, if your package is named foo, and a user installs it, and then does require("foo"), then your main module's exports object will be returned.   This should be a module ID relative to the root of your package folder   For most modules, it makes the most sense to have a main script and often not much else.
    상기 설명 에서 다음 과 같은 결론 을 얻 을 수 있다.
  • main 필드 는 모듈 ID 로 프로그램의 주 입구 입 니 다.
  • require("xxx")를 사용 할 때 main 필드 에 대응 하 는 js 파일 의 module.exports 를 가 져 옵 니 다.
  • 그래서 require 가 모듈 을 가 져 올 때 해당 모듈 package.json 에서 main 필드 에서 지정 한 파일 을 실행 합 니 다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기