[javascript] 노드 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 질문을 보았지만 솔루션을 구현하려고 할 때 다른 오류 메시지가 나타납니다.



답변

Node 4에서 ES6를 사용하는 경우 트랜스 파일러없이 ES6 모듈 구문을 사용할 수 없지만 CommonJS 모듈 (노드의 표준 모듈)은 동일하게 작동합니다.

module.export.AspectType

해야한다

module.exports.AspectType

따라서 오류 메시지 “Undefined의 ‘AspectType’속성을 설정할 수 없습니다 module.export === undefined. “

또한

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

그냥 쓸 수 있어요

class AspectType {
    // ...    
}

기본적으로 동일한 동작을 얻습니다.


답변

// 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();


답변

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 를 읽어보십시오.


답변

클래스 표현 은 간단하게 사용할 수 있습니다.

 // 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);


답변

나는 단순히 이렇게 쓴다

AspectType 파일에서 :

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

다음과 같이 가져옵니다.

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


답변

다른 답변 중 일부는 비슷하지만 솔직히 가장 깨끗하고 간단한 구문을 사용하는 것이 좋습니다. OP는 ES6 / ES2015에서 수업을 내보내는 수단을 요청했습니다. 나는 당신이 이것보다 훨씬 더 깨끗해질 수 있다고 생각하지 않습니다.

'use strict';

export default class ClassName {
  constructor () {
  }
}