Как я могу использовать одно пространство имен для нескольких импортируемых модулей? - PullRequest
0 голосов
/ 30 января 2020

Возможно ли иметь одно пространство имен для нескольких импортируемых модулей? Я хочу сделать что-то вроде этого:

import {moduleA, moduleB, moduleC} as ModuleManager from 'AllMyModules.js';

Таким образом, я могу избежать конфликтов, таких как функция модуля и класса, имеющие одно и то же имя, для пример:

moduleA = () => {
}

doSomething = () => {
   ModuleManager.moduleA();
   moduleA();
}  

Конечно, это еще не все, предоставление модулям пространства имен также улучшает удобочитаемость и помогает мне знать, откуда происходит функция или модуль и для какой цели.

Обратите внимание , о котором я уже знаю:

import * as ModuleManager from 'AllMyModules.js'  

И это не то, что я ищу! Я не хочу, чтобы ModuleManager включите все, есть три причины для этого:
1-Когда я указываю такие модули, как {moduleA, moduleB, moduleC} одним взглядом, я могу сказать, какие модули использует этот файл.
2-Это мешает мне от использования модулей я не должен ошибаться (особенно, когда ваши модули - это некоторые службы, которые получают некоторые данные, их легко совершать ошибки)
3-я предполагаю, что только импорт того, что мне нужно, легче и помогает с меньшим размером пакета?, ну, я не уверен в этом.

1 Ответ

1 голос
/ 30 января 2020

Вы можете импортировать с помощью *, хотя при этом будет импортировано все пространство имен AllMyModules, а не только те, которые вы выбираете:

import * as ModuleManager from 'AllMyModules.js';
// ...
ModuleManager.moduleA();

Если вам нужен объект только с некоторыми * Модули 1007 *, не все, и ни один из экспортов не является изменяемым (который экспортирует , в любом случае не должен ), затем, чтобы сохранить код DRY, извлеките то, что вы хотите, в новый объект после импорта:

import * as ModuleManagerNS from 'AllMyModules.js';
const ModuleManager = {};
for (const prop of ['moduleA', 'moduleB', 'moduleC']) {
  ModuleManager[prop] = ModuleManagerNS[prop];
}
ModuleManager.moduleA();

Если вы хотите избежать использования import *, вы также можете переименовать импорт при импорте, чтобы избежать коллизий имен, хотя это выглядит довольно WET:

import {moduleA as moduleManagerModuleA, moduleB as moduleManagerModuleB, moduleC as moduleManagerModuleC} from 'AllMyModules.js';
const ModuleManager = {
  moduleA: moduleManagerModuleA,
  moduleB: moduleManagerModuleB,
  moduleC: moduleManagerModuleC,
}

I ' Настоятельно предпочитаю использовать import *.

Я предполагаю, что только импорт того, что мне нужно, легче и помогает с меньшим размером пучка?, ну, я не уверен в этом.

Может. Если у вас есть модули с экспортом, который будет go полностью неиспользуемым, этот может помочь с встряхиванием дерева , хотя вам придется утомительно перечислять каждое имя экспорта, как в приведенном выше фрагменте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...