Ошибка типа: невозможно прочитать свойство 'userAgent' из неопределенного
Я пытаюсь интегрировать ползунк реакции- слика в свое приложение ReactJS.
Он работает, как и ожидалось, когда я интегрирую его в новое демонстрационное приложение, но если я интегрирую его в свое собственное приложение, он выдаст ошибку. Я использую рельсы в качестве бэкэнда.
Когда я пытаюсь импортировать слайдер в компоненте, как
var Slider = require('react-slick');
это показывает мне ошибку.
журналы ошибок (в рельсах)
| ExecJS::ProgramError - TypeError: Cannot read property 'userAgent' of undefined:| execjs (2.7.0)
lib/execjs/ruby_racer_runtime.rb:98:in `wrap_error'| execjs (2.7.0)
lib/execjs/ruby_racer_runtime.rb:15:in `rescue in block in initialize'| execjs (2.7.0)
lib/execjs/ruby_racer_runtime.rb:12:in `block in initialize' | execjs (2.7.0)
lib/execjs/ruby_racer_runtime.rb:75:in `block in lock'| execjs (2.7.0)
lib/execjs/ruby_racer_runtime.rb:73:in `lock'| execjs (2.7.0)
lib/execjs/ruby_racer_runtime.rb:9:in `initialize'| execjs (2.7.0)
редактировать
Где-то еще в моем коде я написал код ниже, и он работает нормально
'use strict';
var React = require('react');
import logo from 'img/spark-logo.jpg'
var Carousel = require('nuka-carousel');
//import { NukaDecorate } from 'nuka-carousel-autoscroll';
class App1 extends React.Component{
// mixins: [Carousel.ControllerMixin],
render() {
return (
<Carousel>
<img src={logo} alt="Smiley face" />
<img src="http://placehold.it/1000x400/ffffff/c0392b/&text=slide2"/>
<img src="http://placehold.it/1000x400/ffffff/c0392b/&text=slide3"/>
</Carousel>
)
}
}
module.exports = App1;
2 ответа
Проблема заключается в том, что вы, очевидно, пытаетесь визуализировать серверную часть своего приложения (или, по крайней мере, это требуется в не-браузерном контексте).
Одна из зависимостей пытается получить доступ к userAgent
свойство глобального navigator
объект, который определяется только в браузерах.
Чтобы избежать этой проблемы, вы можете попытаться изолировать плагин, только требуя его в браузере с проверкой на window
или эквивалент в вашем рубине.
Вы также можете просто смоделировать переменную по умолчанию, чтобы она не вылетала. Просто определите это как:
global.navigator = {
userAgent: 'node',
}
несколько подходов:
- удалить node_module, установить все заново;
- Убедитесь, что вы устанавливаете правильную версию пакета, например, должен использовать [email protected][email protected]