JS — Импорт отдельного класса с помощью импорта

#javascript

#javascript

Вопрос:

Я не понимаю, почему я не могу импортировать определенный класс — я устраняю недопонимание чего-то фундаментального с импортом модуля.

Итак, допустим, у меня есть index.js файл с именем ‘MyModule’:

 'use strict';

const One = require('./One.js');
const Two = require('./Two.js');
const Three = require('./Three.js');;

module.exports = {
  One,
  Two,
  Three
};
  

И скажем, One.js выглядит примерно так:

 'use strict';

class One {
   constructor(...) { ... }
   ...
}

module.exports = One;
  

Когда я собираюсь использовать этот модуль в своем коде, я в настоящее время делаю:

 const myMod = require('MyModule');

// Then I use it like so:

const something = new myMod.One(...)
  

Это работает нормально, однако почему мне не разрешено делать:

 import { One } from require('MyModule')
  

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

Ваши объяснения приветствуются.

Спасибо.

Комментарии:

1. Вы не импортируете и не требуете. Выполните одно или другое: import { One } from 'MyModule'

2. Я пробовал это, но получаю ошибку SyntaxError: Cannot use import statement outside a module

Ответ №1:

Есть два способа, которыми вы можете импортировать путем деструктурирования:

 import { One } from 'MyModule' // This is only allowed within modules not on the main program
  

или

 const { One } = require('MyModule');
  

Комментарии:

1. Второй вариант работает — const { One } = require('MyModule'); но первый дает мне SyntaxError: Cannot use import statement outside a module

2. На самом деле это нормально: nodejs.org/api/esm.html#esm_package_json_type_field