Как определить класс И константы в модуле CommonJS - PullRequest
0 голосов
/ 29 ноября 2018

Я видел этот поток о том, как совместно использовать константы между модулями CommonJS: Как вы делитесь константами в модулях NodeJS?

Однако, если я хочу, чтобы этот файл также имелкласс, который должен быть представлен в модуле, тогда как мне этого добиться?

Если я сделаю:

module.exports = class A {...}

Тогда я «использовал» объект module.exports.

Есть ли способ смешать константы класса И в одном файле?

В es6 я бы просто добавилтермин "экспорт" перед каждым ...

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

module.exports = ... - это плохая практика, если есть вероятность, что модуль может иметь более одного экспортируемого значения.

Уже существует module.exports объект с псевдонимом exports, его назначение аналогичнок именованному экспорту в модулях ES:

exports.A = class A { ... };

exports.b = 'constant';
0 голосов
/ 29 ноября 2018

Получил его на работу.

В файле X.js я пишу:

constant B = "value";

class A {

}

modules.exports = {
    A: A,
    B: B  
};

В коде клиента я использую:

const X =require ('./ X');

let a = новый XA ();

0 голосов
/ 29 ноября 2018

Это довольно легко понять.Теперь предположим, что у вас есть такой код:

export class A { }
export const y= 5;

Который вы в основном хотите.Но это то же самое, что и

class A { }
const x = 5;
exports.A = A;
exports.x = 5;

Теперь вы можете это понять.откройте babel repl и вставьте туда свой код ES6.Это даст вам ES5 эквивалент в правой панели.

Я вставил этот код ES6 и получил обратно

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var A = exports.A = function A() {
  _classCallCheck(this, A);
};

var y = exports.y = 5;

Не беспокойтесь о _classCallCheck, это просто защита, поэтому вы не можете просто позвонить A() вместо new A()

Надеюсь, это поможет.

...