Ошибка типа: невозможно прочитать свойство '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',
}

несколько подходов:

  1. удалить node_module, установить все заново;
  2. Убедитесь, что вы устанавливаете правильную версию пакета, например, должен использовать [email protected][email protected]
Другие вопросы по тегам