2015-12-14 8 views
5

Реагировать с babel. У меня есть эта путаница с импортом и module.exports. Я предполагаю, что babel при преобразовании кода ES6 в ES5 преобразует импорт и экспорт в требуемый и module.exports соответственно.Module.exports и es6 Импорт

Если я экспортирую функцию из одного модуля и импортирую функцию в другой модуль, код выполняет штраф. Но если я экспортирую функцию с помощью modules.exports и импортирую с помощью «import», во время выполнения появляется ошибка, говорящая, что это не функция.

Я приготовил пример.

// Tiger.js 
function Tiger() { 
    function roar(terrian){ 
     console.log('Hey i am in ' + terrian + ' and i am roaing'); 
    }; 
    return roar; 
} 

module.exports = Tiger; 

// animal.js 
import { Tiger } from './animals'; 

var animal = Tiger(); 
animal("jungle"); 

Я использовал babel с предустановленным es2015, чтобы скомпрометировать его. Это дает мне следующую ошибку

Uncaught TypeError: (0 , _animals.Tiger) is not a function

Но если я удалить module.exports = Tiger; и заменить его export { Tiger }; Он отлично работает.

Что мне здесь не хватает?

EDIT: Я пользуюсь браузером в качестве модуля.

+0

Вы посмотрели на выход Бабеля? Глядя на переполненный источник 'Tiger.js', вы сразу сообщите, почему он не работает. Короче говоря: придерживайтесь одной модульной системы или используйте модуль, например webpack, который позаботится о несоответствиях. – GJK

+0

Приносим извинения, что использую браузеру как модуль bundler – Nani

ответ

2

export { Tiger } будет эквивалентен module.exports.Tiger = Tiger. И наоборот, module.exports = Tiger будет эквивалентно export default Tiger. Поэтому, когда вы используете module.exports = Tiger, а затем попробуйте import { Tiger } from './animals', вы действительно просите Tiger.Tiger.

+0

, так что же было бы правильным импортером? это будет просто «импортировать тигра из»./animals''? –

+0

Я так считаю, предполагая, что вы не хотите менять tiger.js –

Смежные вопросы