Проблема в том, что вы смешиваете синтаксис модуля. Когда вы используете require, вы получите обратно объект со свойством default
и свойством greet2
.
require
предполагает, что вы знаете, как структурированы ваши экспорты, потому что они могут быть в практически любая форма, указанная вами с помощью module.exports = anything
ES-модулей, имеет строгие спецификации. Это позволяет импорту принимать форму того, что исходит от экспорта, и выполнять такие вещи, как удобно, деструктурировать его для вас.
В настоящее время, если вы зарегистрируете его, переменная greet будет таким объектом:
Object {default: function _default(), greet2: function greet2()}
Это, конечно, не функция и, следовательно, ошибка.
Если вместо этого вы используете синтаксис импорта
import greet from './lib/index';
, он скомпилируется в нечто, эквивалентное:
const greet = require('./lib/index').default;
Вы, конечно, можете использовать требование себя таким же образом, вы просто должны знать форму того, что возвращается из require
, и соответственно деструктурировать ее.