Эхо Laravel с угловой ошибкой 6 webpack. Эхо не конструктор - PullRequest
0 голосов
/ 04 июля 2018

Я работаю с бэкэндом Laravel и Angular 6 в качестве внешнего интерфейса и пытаюсь реализовать вещание с помощью socket.io.

У меня установлен npm laravel-echo socket.io. Следуя инструкциям из документации laravel здесь Я импортирую соответствующие библиотеки и пытаюсь создать новый экземпляр echo. Вот как это выглядит в моем app.module.ts:

import { Echo } from 'laravel-echo';

declare global {
    interface Window { io: any; }
    interface Window { Echo: any; }
}

window.io = window.io || require('socket.io-client');
window.Echo = window.Echo || new Echo({
    broadcaster: 'socket.io',
    host: 'http://localhost:6001'
});

Когда я пытаюсь скомпилировать приложение, я получаю эту ошибку:

enter image description here Uncaught TypeError: laravel_echo__WEBPACK_IMPORTED_MODULE_32 __. Echo не является конструктором

В строке 59 упоминается новый вызов Echo .... Любой совет приветствуется, спасибо.

Ответы [ 3 ]

0 голосов
/ 13 июля 2018

Я исправляю эту проблему, создав файл "laravel-echo.d.ts" в папке src. и объявить модуль в нем следующим образом.

                      declare module 'laravel-echo';

и затем измените код с

       import {Echo} from 'laravel-echo';

до

       var Echo=require('laravel-echo');

проблема решена.

0 голосов
/ 25 мая 2019

Это не самая красивая, но работает:

Установить зависимости

yarn add laravel-echo
yarn add types/node

Добавить в tsconfig.json

"types" : ["node"],

Добавить в app.module.ts

import Echo from 'laravel-echo';

(window as any).global = window;
declare var require: any;

declare global {
  interface Window {
    io: any;
  }

  interface Window {
    Echo: any;
  }
}

window.io = window.io || require('socket.io-client');
window.Echo = window.Echo || {};

window.Echo = new Echo({
  broadcaster: 'socket.io',
  host: 'http://localhost:6001'
});

window.Echo.channel('channel-name')
  .listen('.channelEvent', (data) => {
    console.log('From laravel echo: ', data);
  });

0 голосов
/ 04 июля 2018

Чтобы это исправить, я удалил все, что включил в файл app.module.ts, и включил путь к модулю узла в массиве scripts в файле angular.json:

"scripts": [
   "node_modules/hammerjs/hammer.min.js",
   "node_modules/laravel-echo/dist/echo.js"
],

В компоненте я мог ссылаться на объект Echo следующим образом:

// At the top of the file
declare global {
    interface Window { io: any; }
    interface Window { Echo: any; }
}

declare var Echo: any;

window.io = window.io || require('socket.io-client');
window.Echo = window.Echo || {};

Всякий раз, когда вы хотите начать слушать:

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: 'https://host-address.com:6001'
});
window.Echo.channel('channel-name')
    .listen('.channelEvent', (data) => {
       console.log('From laravel echo: ', data);
    });

Надеюсь, это спасет кого-то еще!

...