source

Node.js module.exports의 목적은 무엇이며 어떻게 사용합니까?

lovecheck 2022. 10. 29. 10:08
반응형

Node.js module.exports의 목적은 무엇이며 어떻게 사용합니까?

Node.js의 입니까?module.exports떻게게사?사 용??

이에 대한 정보는 찾을 수 없지만 소스 코드에서 자주 볼 수 있는 Node.js의 중요한 부분인 것 같습니다.

Node.js 매뉴얼에 따르면:

모듈

의 「 」에 대한 .module ★★★module.exportsobject.export object와 . 것은, 을 참조하십시오.src/node.js자세한 정보는.

하지만 이것은 별로 도움이 되지 않는다.

정확히 어떤 일입니까?module.exports럼럼 간단 단??

module.exports 실제로 반환되는 오브젝트입니다.requirediscl.discl.discl을 클릭합니다.

exports변수는 처음에 동일한 개체(즉, 줄임말")로 설정되므로 모듈 코드에는 보통 다음과 같이 씁니다.

let myFunc1 = function() { ... };
let myFunc2 = function() { ... };
exports.myFunc1 = myFunc1;
exports.myFunc2 = myFunc2;

함수를 내보내다(myFunc1 ★★★★★★★★★★★★★★★★★」myFunc2.

그리고 발신자 코드에는 다음과 같은 것을 사용합니다.

const m = require('./mymodule');
m.myFunc1();

은 기서 of of of where 、 、 of 、 、 where 、 where 、 where 、 where 、 where 、 where 、 where where where 。require는 (통상은) 속성에 액세스 할 수 있는 단순한 오브젝트입니다.

: NB를 덮어쓰는 : " " "exports 이제 더 이 .module.exports 오브젝트 참조를 「」에 exports새로운 오브젝트도 할당해야 합니다.module.exports


이 이 이 이름에 입니다.exports추가할 범위 는 없습니다.object는 다음과 .따라서 다음과 같은 작업을 수행할 수 있습니다.

let myVeryLongInternalName = function() { ... };
exports.shortName = myVeryLongInternalName;
// add other objects, functions, as required

그 다음:

const m = require('./mymodule');
m.shortName(); // invokes module.myVeryLongInternalName

이것은 이미 회답이 되었습니다만, 몇 가지 설명을 덧붙이고 싶습니다만…

다 쓸 수요.exports ★★★★★★★★★★★★★★★★★」module.exports수입하다

var mycode = require('./path/to/mycode');

코드는 JS에 입니다.exports.를 .timeout을 .require()

간단한 계산 예에서는 다음과 같이 할 수 있습니다.

(counter.filename):

var count = 1;

exports.increment = function() {
    count++;
};

exports.getCount = function() {
    return count;
};

응용 프로그램(web.dll 또는 기타 .dll 파일):

var counting = require('./counter.js');

console.log(counting.getCount()); // 1
counting.increment();
console.log(counting.getCount()); // 2

할 수 있으며 할 수 .또한 이러한 파일을 설정함으로써 반환되는 객체에 속성(스트링, 숫자, 배열, 함수 등)을 추가할 수 있습니다.exports.

물건을 때도 .require()을 가진객체가 아니라 호출할 수 입니다.는 ' 낫다'도 같이 해야 돼요.module.exports 이렇게요.

(안녕하세요) :

module.exports = exports = function() {
    console.log("Hello World!");
};

(app.disples):

var sayHello = require('./sayhello.js');
sayHello(); // "Hello World!"

exports와 module.exports의 차이는 이 답변에서 더 잘 설명됩니다.

주의:JS 모듈 메커니즘은 Common을 기반으로 합니다.RequireJs와 같은 다른 많은 구현에서 지원되는 JS 모듈뿐만 아니라 SprootCore, CouchDB, Wakanda, OrientDB, ArangoDB, RingoJs, TeaJs, SilkJs, curl.js 또는 Adobe Photoshop(PSLib 경유)도 지원합니다.여기에서는, 기존의 실장 전체의 리스트를 참조할 수 있습니다.

이 노드 고유의 하지 않는 한 를 하는 것이 .exportsmodule.exports 그것은 공통의 일부가 아니다.JS 표준이며, 다른 구현에서는 대부분 지원되지 않습니다.

다른 은 JS에 새로운 입니다.exports이 스레드에서 Jed Watson이 제공한 마지막 예시와 같이 속성과 메서드를 추가하는 것만이 아니라나는 개인적으로 이 관행을 저지할 것이다. 왜냐하면 이것은 공통의 순환 참조 지원을 깨뜨리기 때문이다.JS 모듈메커니즘그 후 모든 구현에서 지원되는 것은 아니며 보다 범용적인 모듈을 제공하기 위해 Jed의 예를 다음과 같이 기술해야 합니다(또는 유사한 예).

(안녕하세요) :

exports.run = function() {
    console.log("Hello World!");
}

(app.disples):

var sayHello = require('./sayhello');
sayHello.run(); // "Hello World!"

또는 ES6 기능 사용

(안녕하세요) :

Object.assign(exports, {
    // Put all your public API here
    sayhello() {
        console.log("Hello World!");
    }
});

(app.disples):

const { sayHello } = require('./sayhello');
sayHello(); // "Hello World!"

PS: Appcelerator도 Common을 실장하고 있는 것 같습니다.JS 모듈(단, 순환 참조 지원 없음) (AcceleratorCommon 참조)JS 모듈(캐싱순환 참조)

해야 할 몇 과 같습니다.exports "/"/"modules.exports:

(1)에 되어 있는 모든 exports ★★★★★★★★★★★★★★★★★」module.exports가 다른 새 손실됩니다.

이것은 명백하지만 기존 모듈의 선두에 내보내기된 메서드를 추가할 경우 내보낸 네이티브 객체가 마지막에 다른 객체를 참조하고 있지 않은지 확인하십시오.

exports.method1 = function () {}; // exposed to the original exported object
exports.method2 = function () {}; // exposed to the original exported object

module.exports.method3 = function () {}; // exposed with method1 & method2

var otherAPI = {
    // some properties and/or methods
}

exports = otherAPI; // replace the original API (works also with module.exports)

. (2) 중 exports ★★★★★★★★★★★★★★★★★」module.exports하면, 은 더 같은 더 이상 같은 오브젝트를 참조하지 않습니다.

exports = function AConstructor() {}; // override the original exported object
exports.method2 = function () {}; // exposed to the new exported object

// method added to the original exports object which not exposed any more
module.exports.method3 = function () {}; 

3. 까다로운 결과입니다.exports ★★★★★★★★★★★★★★★★★」module.exports노출되어 있는지 알 수 ('API'처럼module.exportswins)

// override the original exported object
module.exports = function AConstructor() {};

// try to override the original exported object
// but module.exports will be exposed instead
exports = function AnotherConstructor() {}; 

module.property 또는 exports 객체는 모듈이 애플리케이션과 공유할 항목을 선택할 수 있도록 합니다.

여기에 이미지 설명 입력

module_export에 관한 비디오는 이쪽에서 입수할 수 있습니다.

할 경우 프로그램코드를 분할합니다.module.exports는 모듈의 소비자에게 변수와 함수를 퍼블리시하기 위해 사용합니다.require()하는 「콜」로 됩니다.module.exports모듈로부터 로드됩니다.

모듈 작성 시 주의사항

  • 모듈 로드는 캐시되며 초기 콜만 JavaScript를 평가합니다.
  • 모듈 내에서 로컬 변수와 함수를 사용할 수 있으며, 모든 항목을 내보낼 필요는 없습니다.
  • module.exports오브젝트는 다음과 같이 사용할 수도 있습니다.exports 단독 반드시 ,, 독, 독, 독을 사용합니다.module.exports.

모듈 내보내기 다이어그램

"모듈 제2부 - 모듈 쓰기"에 따릅니다.

참조 링크는 다음과 같습니다.

exports = module.exports = function(){
    //....
}

exports ★★★★★★★★★★★★★★★★★」module.exports변수와

해야 할 , 은 바로 마라' 입니다.overrideexports exports exports 。

왜요?

module.default 참조만 내보내기 때문에 속성을 내보내기에 추가할 수 있지만 내보내기를 덮어쓰면 참조 링크가 끊어집니다.

좋은 예:

exports.name = 'william';

exports.getName = function(){
   console.log(this.name);
}

나쁜 예:

exports = 'william';

exports = function(){
     //...
}

하나의 함수 또는 변수만 노출하는 경우 다음과 같이 하십시오.

// test.js
var name = 'william';

module.exports = function(){
    console.log(name);
}   

// index.js
var test = require('./test');
test();

이 모듈에서는 1개의 기능만 노출되어 있으며 이름의 속성은 외부에서는 비공개입니다.

http, sys 의 node.js를 다운로드하여 설치할 때 node.js에 기본 모듈 또는 기존 모듈이 있습니다.

이미 node.js에 있기 때문에 이들 모듈을 사용할 때는 기본적으로 Import 모듈을 선호합니다만, node.js에는 이미 모듈이 있기 때문에 그 이유는 무엇입니까?Import는 node.js에서 가져와 프로그램에 넣는 것과 같습니다.그리고 그것들을 사용하죠.

Exports는 정반대이지만 원하는 모듈을 만듭니다.예를 들어 module addition.js를 사용하여 해당 모듈을 node.js에 넣습니다.이러한 모듈을 export하면 됩니다.

여기에 글을 쓰기 전에 module.exports.additionTwo exports.additionTwo와 동일합니다.

허, 그래서 그런 거구나,

exports.additionTwo = function(x)
{return x+2;};

길을 조심해라

addition.js 모듈을 작성했다고 가정합니다.

exports.additionTwo = function(x){
return x + 2;
};

NODE에서 실행할 경우.JS 명령 프롬프트:

node
var run = require('addition.js');

이 에러는 다음과 같습니다.

오류: 모듈 addition.js를 찾을 수 없습니다.

이는 경로를 언급하지 않았기 때문에 node.js 프로세스에서 addition.js를 사용할 수 없기 때문입니다.따라서 NODE_PATH를 사용하여 경로를 설정할 수 있습니다.

set NODE_PATH = path/to/your/additon.js

이것으로, 에러 없이 정상적으로 실행됩니다!!

또한 NODE_PATH를 설정하지 않고 nodejs 명령 프롬프트로 돌아가 addition.js 파일을 실행할 수도 있습니다.

node
var run = require('./addition.js');

지금 에 지금 안내하고 ../이 동작도 정상적으로 실행됩니다.

모듈은 관련 코드를 단일 코드 단위로 캡슐화합니다.모듈을 작성할 때 이는 관련된 모든 함수를 파일로 이동하는 것으로 해석할 수 있습니다.

두 가지 함수를 포함하는 Hello.js 파일이 있다고 가정합니다.

sayHelloInEnglish = function() {
  return "Hello";
};
sayHelloInSpanish = function() {
  return "Hola";
};

이 함수는 코드의 효용성이 여러 콜일 경우에만 작성됩니다.

함수의 유틸리티를 World.js와 같은 다른 파일로 늘리고 싶다고 가정해 봅시다.이 경우 파일을 내보내는 것은 module.exports에서 얻을 수 있는 그림으로 나타납니다.

아래 주어진 코드로 두 함수를 모두 내보낼 수 있습니다.

var anyVariable={
 sayHelloInEnglish = function() {
      return "Hello";
    };
  sayHelloInSpanish = function() {
      return "Hola";
    }; 
}
module.export=anyVariable;

이러한 기능을 사용하려면 World.js에 파일 이름만 입력하면 됩니다.

var world= require("./hello.js");

목적은 다음과 같습니다.

모듈러 프로그래밍은 프로그램의 기능을 독립적이고 호환성이 있는 모듈로 분리하는 것을 강조하는 소프트웨어 설계 기법이며, 각 모듈에는 원하는 기능의 한 측면만 실행하는 데 필요한 모든 것이 포함됩니다.

위키백과

모듈식/재이용 가능한 코드가 없으면 큰 프로그램을 작성하기가 어려워질 것입니다.에서는 nodejs를 사용하여 수 .module.exports합니다.require.

다음의 예를 시험해 보겠습니다.

fileLog.js

function log(string) { require('fs').appendFileSync('log.txt',string); }

module.exports = log;

stdoutLog.js

function log(string) { console.log(string); }

module.exports = log;

프로그램.js

const log = require('./stdoutLog.js')

log('hello world!');

실행하다

$ 노드 프로그램.js

안녕 월드!

이제 ./stdoutLog.js./fileLog.js와 스왑해 보겠습니다.

모듈 시스템의 목적은 무엇입니까?

다음과 같은 작업을 수행합니다.

  1. 파일이 매우 큰 크기로 부풀어 오르는 것을 방지합니다.예를 들어 5000줄의 코드가 포함된 파일은 일반적으로 개발 중에 처리하기가 매우 어렵습니다.
  2. 관심사 분리를 시행합니다.코드를 여러 파일로 분할하면 모든 파일에 적절한 파일 이름을 지정할 수 있습니다.이렇게 하면 모든 모듈의 기능과 위치를 쉽게 식별할 수 있습니다(당사가 여전히 책임지고 있는 논리 디렉토리 구조를 만들었다고 가정합니다).

모듈이 있으면 코드의 특정 부분을 쉽게 찾을 수 있기 때문에 코드의 유지보수가 용이해집니다.

어떻게 작동합니까?

NodejS과 같은 방법으로 Commom 합니다.JS에 관한 것입니다.

  1. 을 .module.export 변경
  2. Import하다를 사용하여 .require('file') 변경

예:

테스트1.1.199

const test2 = require('./test2');    // returns the module.exports object of a file

test2.Func1(); // logs func1
test2.Func2(); // logs func2

테스트2.199

module.exports.Func1 = () => {console.log('func1')};

exports.Func2 = () => {console.log('func2')};

기타 유용한 정보:

  1. 모듈이 캐시되고 있습니다.동일한 모듈을 2개의 다른 파일에 로드할 때는 모듈을 한 번만 로드하면 됩니다.두 번째 a는require()는 캐시에서 풀된 것과 같은 모듈 상에서 호출됩니다.
  2. 모듈은 동기식으로 로드됩니다.이 동작은 필수입니다.비동기일 경우 에서 검색된 개체에 액세스할 수 없습니다.require()지금 당장.

ECMAScript 모듈 - 2022

Node 14.0부터는 ECMAScript 모듈은 더 이상 실험적이지 않으므로 기존 노드의 공통 모듈 대신 사용할 수 있습니다.JS 모듈

ECMAScript 모듈은 재사용을 위해 JavaScript 코드를 패키징하는 공식 표준 형식입니다.모듈은 다양한 Import 및 Export 문을 사용하여 정의됩니다.

함수를 내보내는 ES 모듈을 정의할 수 있습니다.

// my-fun.mjs
function myFun(num) {
  // do something
}

export { myFun };

그런 다음 my-fun.mjs에서 내보낸 함수를 가져올 수 있습니다.

// app.mjs
import { myFun } from './my-fun.mjs';

myFun();

.mjs는 Node.js ECMAScript 모듈의 기본 확장입니다.단, 디폴트 모듈 확장은 를 사용하여 모듈을 해결할 때 참조하도록 설정할 수 있습니다.package.json "type" 필드 또는 CLI의 플래그.

Node.js의 최신 버전은 ECMAScript와 Common을 모두 완전히 지원합니다.JS 모듈게다가, 이것은 그들 사이의 상호 운용성을 제공합니다.

module.exports

ECMAScript 및 공통JS 모듈에는 많은 차이가 있지만, 가장 관련성이 높은 차이점은 이 질문에 대해 더 이상 존재하지 않는다는 것입니다.require s, no s, no s, no s, no s, no s, no s, no s,exports 더 이상 .module.exports

대부분의 경우 ES 모듈 Import를 사용하여 Common을 로드할 수 있습니다.JS 모듈필요에 따라 module.createRequire()를 사용하여 ES 모듈 내에서 필수 함수를 구성할 수 있습니다.

ECMAScript 모듈이 이력을 해방

풀어주다 변화들
v15.3.0, v14.17.0, v12.22.0 안정화 모듈 구현
v14.13.0, v12.20.0 내보내기라는 이름의 CommonJ 검출 지원
v14.0.0, v13.14.0, v12.20.0 실험 모듈 제거 경고
v13.2.0, v12.17.0 ECMAScript 모듈을 로드하는 데 더 이상 명령줄 플래그가 필요하지 않습니다.
v12.0.0 패키지를 통해 .js 파일 확장자를 사용하여 ES 모듈에 대한 지원을 추가합니다.json "type" 필드
v8.5.0 초기 ES 모듈 구현 추가

Node.js 저장소에서 모든 changelogs를 찾을 수 있습니다.

let test = function() {
    return "Hello world"
};
exports.test = test;

언급URL : https://stackoverflow.com/questions/5311334/what-is-the-purpose-of-node-js-module-exports-and-how-do-you-use-it

반응형