2015-09-07 3 views
0

У меня есть компонент ReactJS, который отображает подкомпоненты, и я хотел бы использовать изотоп для отображения подкомпонентов. Я использую browserify и reactify, чтобы упаковать вещи.isotope-layout with reactjs вызывает Uncaught TypeError: Не удается прочитать свойство EventEmitter undefined

В моем файле component.jsx, это единственное, что вызывает проблему:

var Isotope = require('isotope-layout'); 

Какие Js выдает следующее сообщение об ошибке:

Uncaught TypeError: Cannot read property 'EventEmitter' of undefined 

Особенно, вызванные этой линии var originalGlobalValue = exports.EventEmitter;

В противном случае компонент отлично работает без изотопа.

Я поднял issue на github, но я подумал, что здесь может быть больше внимания.

И я обнаружил, последний «не определено» в упакованном коде EventEmitter

} else if (typeof module === 'object' && module.exports) { 
     module.exports = EventEmitter; 
    } else { 
     exports.EventEmitter = EventEmitter; 
    } 
}).call(undefined); 

После ручного изменения его this и начал работать

}).call(this); 

Это раздел в глотке:

<pre lang="javascript"><code> 
gulp.task('libjs', function() { 
    browserify({ 
     require: libjs, 
    }).transform(babelify, {global:true}).transform(reactify, {global:true}).bundle().pipe(source('lib.js')).pipe(gulp.dest(paths.js_built)); 
}) 

ОБНОВЛЕНИЕ:

Похоже, babelify вызывает эту проблему. Если я не включаю babelify, он не создал }).call(undefined); в упакованном коде.

ответ

0

Вы пробовали в явном виде на "wolfy87-eventemitter": "4.2.0"?

+0

Нет, я не пробовал, в основном я оставил его там, где он был, и не применять изотоп в babelify. –

+0

@JamesLin Я не использовал изотоп, но в зависимости от этого у меня была другая библиотека (React Masonry), и произошло то, что между 4.2.0 и последним версией был введен код, который вызывает эту ошибку в браузере. Если это не прямая зависимость в вашем коде, а зависимость другой зависимости, то просто зависит от версии 4.2.0 (pre-bug), и вам должно быть хорошо идти. Альтернативой является использование npm-shrinkwrap для достижения такого же эффекта. –

0

Это правда, что проблема babelify. Однако, как пояснил Levi Botelho в this answer, и в this issue, требующих

"wolfy87-eventemitter": "4.2.0"

явно решен вопрос для нас.

+0

Спасибо, что подтвердили это, я в принципе не имею кода на этом этапе, но приятно знать. –