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 의 실천 결론 을 분류 하여 토론 할 것 이다.
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 이름 인쇄**
이상 의 집행 결 과 를 통 해 결론 을 얻 을 수 있다.
우 리 는 먼저 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.
상기 설명 에서 다음 과 같은 결론 을 얻 을 수 있다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
NestJs Guard하지만 가드는 ExcutionContext를 사용할 수 있기 때문에 다음에 어떠한 라우트 핸들러가 실행되는지 정확하게 알 수 있다. ExecutionContext는 ArgumentsHost를 상속 받았기 때문에 각 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.