К странице подключены 2 скрипта:
<script src="script.js"></script>
<script src="DOMOperations.js" type="module"></script>
DOMOperations
является модулем, предоставляющим какие-то обертки над DOM операциями:
// DOMOperations.js
export function printToBody(str) {
let textNode = document.createTextNode(str);
document.body.appendChild(textNode);
}
script
является главным скриптом, который импортирует некоторый функционал, предоставляемый модулем:
// script.js
import {printToBody} from "./DOMOperations.js";
printToBody("Hello!");
Но при таком подключении скриптов ничего не работает, потому что, как говорит FireFox, import
выражения могут быть только в верхнем уровне модуля:
SyntaxError: import declarations may only appear at top level of a module
ОК, укажем, что главный скрипт - это модуль:
<script src="script.js" type="module"></script>
<script src="DOMOperations.js"></script>
Но теперь, даже несмотря на то, что все, вроде бы, работает, в консоли все равно есть ошибка, правда уже другая:
SyntaxError: export declarations may only appear at top level of a module
То есть еще и export
выражения могут быть только в верхнем уровне модуля. Выходит, надо оба файла подключить как модули?
<script src="script.js" type="module"></script>
<script src="DOMOperations.js" type="module"></script>
Так тоже все работает, и ошибок никаких нет. Но возникает вполне закономерный вопрос: а где логика?
Почему import
выражения могут появляться только в модуле? Ведь куда более вероятно, что я захочу импортировать какой-то функционал, предоставляемый модулем, то есть из модуля, а не наоборот.
Я бы подумал, что так происходит из за того, что реализация модулей находится еще в ранней стадии (более того, доступна только при определенных настройках браузера), но даже те немногие примеры, что мне удалось найти в интернете, тоже используют такой подход:
<script type="module">
import {addTextToBody} from './utils.js'; // импорты в модуле!
addTextToBody('Modules are pretty cool.');
</script>
Прошу объяснить, почему это реализовано именно так.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У при нажатии на кнопку появляться модальное окно
Привет! Пытаюсь как администратор создать php файл в админкеПри попытке сохранить новый файл вижу "Расширение php не допускается"
Всем привет! нуждаюсь в помощи и совете) вообщем есть две таблицы, продажа и складВ обоих таблицах есть столбец koll (количество) нужно каким...