Как импортировать модуль javascript в функцию IIFE (выражение функции с немедленным вызовом)?

#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 or let ; 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. Если при импорте возникают проблемы, пожалуйста, попробуйте добавить «/» или «./» в зависимости от пути, по которому расположен математический модуль