#javascript
#javascript
Вопрос:
Я хочу добавить модуль javascript в функцию IIFE (выражение функции с немедленным вызовом). К сожалению, я получаю синтаксическую ошибку, которая заключается в следующем:
SyntaxError: import declarations may only appear at top level of a module
Мой math
модуль javascript следующий:
var math = function () {
return {
add: function (num1, num2) {
return num1 * num2;
},
square: function (num) {
return num * num;
}
};
};
if (typeof module !== 'undefined') {
module.exports = math;
}
У меня есть другой файл javascript, который выглядит следующим образом:
import "math";
(function() {
"use strict";
this.m = new math();
console.log(m.add(1, 6));
})();
Импорт определен на самом верху, но синтаксическая ошибка настаивает на том, что я должен переместить объявление импорта наверх.
Я также пытался вставить оператор import в качестве самой первой строки моей функции IIFE (выражение функции с немедленным вызовом), но это недопустимая позиция.
Если кто-нибудь знает, как это будет работать, пожалуйста, напишите комментарий. Я буду действительно признателен.
Комментарии:
1. Как именно используется модуль с
import
? Если вы загружаете его с помощью<script>
,<script>
требуется «тип=модуль».2. Также
this.m
должно быть просто объявлениеvar
orlet
;this
не будет ссылки на что-либо полезное в IIFE.3. @Pointy Поскольку
m
больше не присваивается значение, еще лучше использоватьconst
.4. @Seblor конечно,
const
было бы здорово в этом случае.5. Также также: «верхний уровень» не обязательно означает, что он должен быть в начале файла. Он просто должен находиться за пределами любой функции или блока инструкций.
Ответ №1:
Я думаю, вы принимаете модули JavaScript за Python. import "math";
ничего не сделает. Во-первых, вам нужно назначить экспорт вашего модуля в переменной, и вам также нужно использовать относительный путь, иначе он попытается разрешить его как модуль NPM.
Заменить
import "math";
С помощью :
import math from "./math";
Кроме того, ваша ошибка SyntaxError: import declarations may only appear at top level of a module
может произойти, если вы используете import
инструкцию где-нибудь в середине функции или метода. Все import
инструкции должны быть на верхнем уровне модуля.
Комментарии:
1.
import "math"
«что-то делает»; он запускает код модуля, и, таким образом, произойдут все его побочные эффекты. В этом случае вы, конечно, правы, он должен быть присвоен символу. Однако ошибка связана с тем, как импортирующий модуль отображается в контексте, который, вероятно, является<script>
блоком без правильногоtype
атрибута.2. Часть выполнения модуля верна. Однако ошибка может возникнуть и в Node, если вы используете
import
, например, в функции.
Ответ №2:
не могли бы вы, пожалуйста, попробовать добавить что-то вроде приведенного ниже и проверить еще раз,
module.exports.math = () => {
return {
add: (num1, num2) => {
return num1 * num2;
},
square: (num) => {
return num * num;
}
};
};
Комментарии:
1. Проблема не в экспортирующем модуле.
2. Если при импорте возникают проблемы, пожалуйста, попробуйте добавить «/» или «./» в зависимости от пути, по которому расположен математический модуль