Вопрос:

В javascript возможно ли частично импортировать «промежуточный модуль»?

javascript ecmascript-6

14 просмотра

1 ответ

5518 Репутация автора

Я создал папку Things с множеством файлов Thing, а затем создал индекс внутри папки Thing, которая действует как «промежуточный модуль».

Как это...

// things/thing1.js
console.log('thing1 loaded');

const thing1 = () => {
  console.log('Hi from thing1!');
};

export default thing1;
// things/thing2.js
console.log('thing2 loaded');

const thing2 = () => {
  console.log('Hi from thing2!');
};

export default thing2;

// things/index.js
export { default as thing1 } from './thing1';
export { default as thing2 } from './thing2';

Когда я импортирую любой из файлов из промежуточного модуля ...

// anotherFile.js
import { thing1 } from '../things';

thing1();

... все файлы загружены.

# console output
thing1 loaded
thing2 loaded # <-- don't want this to load.
Hi from thing1!

Кроме как...

import thing1 from './things/thing1';
import thing2 from './things/thing2';

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

Автор: GollyJer Источник Размещён: 11.08.2019 07:39

Ответы (1)


0 плюса

123973 Репутация автора

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

Один из вариантов заключается в изменении thing1и thing2модули таким образом , чтобы они экспортируют функции , которые при запуске, загружать себя - таким образом, их инициализация может выполняться по требованию, а не всякий раз , когда они импортируются (побочные эффекты от всего импорта часто не хорошая идея в любом случае)

// things/initThing1.js
export default () => {
  console.log('thing1 loaded');

  const thing1 = () => {
    console.log('Hi from thing1!');
  };

  return thing1;
};

а также

// anotherFile.js
import { initThing1 } from '../things';

const thing1 = initThing1();
thing1();

(или вы можете инициализировать в промежуточном модуле, если другие модули импортируют из index.js)

Автор: CertainPerformance Размещён: 11.08.2019 07:45
Вопросы из категории :
32x32