programing

노드 4에서 ES6 클래스를 제대로 내보내는 방법은?

powerit 2023. 10. 25. 23:48
반응형

노드 4에서 ES6 클래스를 제대로 내보내는 방법은?

모듈에서 클래스를 정의했습니다.

"use strict";

var AspectTypeModule = function() {};
module.exports = AspectTypeModule;

var AspectType = class AspectType {
    // ...    
};

module.export.AspectType = AspectType;

하지만 다음과 같은 오류 메시지가 나타납니다.

TypeError: Cannot set property 'AspectType' of undefined
    at Object.<anonymous> (...\AspectType.js:30:26)
    at Module._compile (module.js:434:26)
    ....

이 클래스를 어떻게 내보내고 다른 모듈에서 사용해야 합니까?다른 SO 질문도 보았지만 솔루션을 구현하려고 하면 다른 오류 메시지가 나타납니다.

// person.js
'use strict';

module.exports = class Person {
   constructor(firstName, lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }

   display() {
       console.log(this.firstName + " " + this.lastName);
   }
}

 

// index.js
'use strict';

var Person = require('./person.js');

var someone = new Person("First name", "Last name");
someone.display();

노드 4에서 ES6를 사용하는 경우 트랜스필러가 없으면 ES6 모듈 구문을 사용할 수 없지만 공통JS 모듈(노드의 표준 모듈)은 동일하게 작동합니다.

module.export.AspectType

그래야 한다

module.exports.AspectType

따라서 "정의되지 않은 'AspectType' 속성을 설정할 수 없습니다"라는 오류 메시지가 나타납니다.module.export === undefined.

또한.

var AspectType = class AspectType {
    // ...    
};

그냥 써주실수 있나요?

class AspectType {
    // ...    
}

근본적으로 똑같은 행동을 하게 됩니다.

ECMAScript 2015를 사용하면 이와 같이 여러 클래스를 내보내고 가져올 수 있습니다.

class Person
{
    constructor()
    {
        this.type = "Person";
    }
}

class Animal{
    constructor()
    {
        this.type = "Animal";
    }
}

module.exports = {
    Person,
    Animal
};

사용하는 위치:

const { Animal, Person } = require("classes");

const animal = new Animal();
const person = new Person();

이름이 충돌하거나 다른 이름을 선호하는 경우 다음과 같이 이름을 바꿀 수 있습니다.

const { Animal : OtherAnimal, Person : OtherPerson} = require("./classes");

const animal = new OtherAnimal();
const person = new OtherPerson();

사용하다

// aspect-type.js
class AspectType {

}

export default AspectType;

그 다음에 수입하기 위해.

// some-other-file.js
import AspectType from './aspect-type';

자세한 내용은 http://babeljs.io/docs/learn-es2015/ # modules를 참조하십시오.

저는 그냥 이렇게 씁니다.

AspectType 파일에서 다음을(를)

class AspectType {
  //blah blah
}
module.exports = AspectType;

다음과 같이 가져옵니다.

const AspectType = require('./AspectType');
var aspectType = new AspectType();

클래스 표현은 단순화를 위해 사용될 수 있습니다.

 // Foo.js
'use strict';

// export default class Foo {}
module.exports = class Foo {}

-

// main.js
'use strict';

const Foo = require('./Foo.js');

let Bar = new class extends Foo {
  constructor() {
    super();
    this.name = 'bar';
  }
}

console.log(Bar.name);

다른 대답들도 여러 개 있지만, 솔직히 가장 깨끗하고 간단한 구문을 사용하는 것이 좋을 것 같습니다.OP는 ES6/ES2015에서 클래스를 내보낼 수 있는 방법을 요청했습니다.이보다 더 깨끗해질 수는 없을 것 같습니다.

'use strict';

export default class ClassName {
  constructor () {
  }
}

저도 같은 문제가 있었습니다.제가 발견한 것은 제가 받는 대상을 학급 이름과 같은 이름으로 불렀다는 것입니다.예:

const AspectType = new AspectType();

일이 그렇게 엉망이 되어 버려서...이게 도움이 되기를 바랍니다.

때로는 하나의 파일에 여러 클래스를 선언해야 하거나, JetBrains 편집자가 이를 더 잘 이해하기 때문에 기본 클래스를 내보내고 이름을 내보내고 싶습니다.저는 그냥.

global.MyClass = class MyClass { ... };

그리고 다른 곳에서:

require('baseclasses.js');
class MySubclass extends MyClass() { ... }

언급URL : https://stackoverflow.com/questions/32657516/how-to-properly-export-an-es6-class-in-node-4

반응형