Как экспортировать с использованием динамического имени для переменных / функций с помощью модулей ES6? - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь использовать синтаксис ES6 + в моем текущем проекте, однако, у модулей ES6 + может быть недостаток по сравнению с модулями ES5.

Q1.Есть ли способ экспортировать переменные / функции, используя динамические имена, что-то похожее на динамические ключи в объектах.

const externalName = 'Joeys' Pizza'
const pizzaShop = {tel: '555-555-555'}

// ES5
exports[externalName] = pizzaShop // works ?

// ES6
export const [externalName] = pizzaShop // error ?

Q2.У меня есть логика экспорта, которую я хочу использовать повторно, поэтому я инкапсулировал ее в функцию.Тем не менее, кажется, что такого рода вещи могут быть невозможны с модулями ES6 +.

// ES5: all good ?
const exporter = db => {
  exports.first = db.collections('first')
  exports.second = db.collections('second')
}


// ES6: compiler says: Modifiers cannot appear here ?
const exporter = db => {
  export const first = db.collections('first')
  export const second = db.collections('second')
}

Любые советы, информация или предложения будут оценены.В настоящее время я чувствую, что два синтаксиса модуля могут обрабатываться по-разному, с другой стороны, может быть обходной путь, о котором я не знаю.

Заранее спасибо.

1 Ответ

1 голос
/ 21 апреля 2019

Есть ли способ экспортировать переменные / функции, используя динамические имена, что-то похожее на динамические ключи в объектах.

Нет, нет. Вы должны быть в состоянии назвать экспорт, он не должен быть динамическим.

Если это абсолютно необходимо, экспортируйте объект и присвойте ему произвольные свойства.

У меня есть некоторая логика экспорта, которую я хочу использовать повторно, поэтому я инкапсулировал ее в функцию. Однако, похоже, что такого рода вещи могут быть невозможны с модулями ES6 +.

То, что вы делали в ES5, все равно было сомнительным Вызов exporter действительно изменил объект exports, его многократный вызов вызовет полный хаос.

Вы можете повторить это поведение, выполнив

export var first, second;
function exporter(db) {
  first = db.collections('first');
  second = db.collections('second');
}

или

var database;
export function first() {
  return database.collections('first');
}
export function second() {
  return database.collections('second');
}
function exporter(db) {
  database = db;
}

но было бы лучше, если бы вы просто создали новый объект вместо того, чтобы возиться с экспортом:

export default function exporter(db) {
  return {
    first: db.collections('first'),
    second: db.collections('second'),
  };
}
...