노드 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
'programing' 카테고리의 다른 글
PySpark DataFrame Aggregate의 열 이름 변경 (0) | 2023.10.25 |
---|---|
레일 앱을 Oracle에 연결할 수 없음 (0) | 2023.10.25 |
리소스 정의의 매개 변수 이름에 "at" 기호를 지정합니다. (0) | 2023.10.25 |
모듈이 호환되지 않는 버전의 Kotlin으로 컴파일되었습니다.메타데이터의 이진 버전은 1.5.1이고 예상 버전은 1.1.15입니다. (0) | 2023.10.25 |
XML 정의를 사용하여 삼각형 모양 만들기? (0) | 2023.10.25 |