2017-01-21 4 views
0

Я хотел бы составить демоверсию, показывающую порядок загрузки модулей. Предполагается наличие двух модулей: Uno и Duo и я хотел бы напечатать их имена на консоли при их загрузке. Как я могу это сделать? Я говорю о следующем псевдокоде.Как вызвать метод при загрузке модуля?

Uno.js

import Duo from "./duo.js"; 
default export { 
    loaded:() => { console.log("Uno loaded"); } 
} 

Duo.js

default export { 
    loaded:() => { console.log("Duo loaded"); } 
} 

Я попробовал пару диких выстрелов, как загружен, INIT, начать и т.д. но не получили распечаток. Затем я немного разошлись по нему, но не видел никаких примеров, показывающих что-либо связанное, за исключением, например, Vue, где создается событие. Добавление термина Конструкция создает волну сравнений между модулями и прототипами.

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

Я видел подход chaining the requireand subsequent statements, но в моем случае я хочу, чтобы сам модуль был самодостаточно подробным.

+0

По умолчанию экспортирующих объект литералов является плохой идеей. Вместо этого используйте named export: 'export function loaded() {...}'. – Bergi

ответ

0

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

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

// uno.js 
import "./duo.js"; 
console.log("Uno loaded"); 

// duo.js 
console.log("Duo loaded"); 
+0

Отлично, что явно указано. У меня есть ответ на изменение вашего импортного вызова. Вы опускаете ключевое слово 'from', а также имя того, что оно импортируется. Как так? Это эквивалентно импортированию анонимно, если нам не нужна ссылка на импорт? Или это какая-то короткая рука, о которой я не знаю? –

+0

Да, поскольку мой модифицированный 'duo.js' больше ничего не экспортирует, я ничего не импортирую из него (мне не нужен ни один идентификатор' Uno' в любом месте). Импорт просто гарантирует, что другой модуль уже загружен. – Bergi

+0

Отлично! +1 для разработки. Мне сейчас интересно, есть ли разумный сценарий, когда мы хотим, чтобы модуль загружался **, но ** не хотите ссылаться на него? Я могу себе представить, что импорт моих CSS из файла SASS не требует именования результатов. Это верно? Как насчет файлов JS? Любой не странный случай, когда мы хотим импортировать кусок JavaScript, но затем не использовать ссылку на него? –

Смежные вопросы