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