Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webpack Laravel回声,角度6个网页错误。Echo不是构造函数_Webpack_Socket.io_Angular6_Laravel Echo - Fatal编程技术网

Webpack Laravel回声,角度6个网页错误。Echo不是构造函数

Webpack Laravel回声,角度6个网页错误。Echo不是构造函数,webpack,socket.io,angular6,laravel-echo,Webpack,Socket.io,Angular6,Laravel Echo,我正在使用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 W

我正在使用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'
});
当我尝试编译应用程序时,出现以下错误:

未捕获类型错误:laravel\u echo\u网页包\u导入的模块\u 32\u。echo不是构造函数

第59行引用的是新的Echo。。。呼叫
感谢您的建议。

为了解决此问题,我删除了app.module.ts文件中包含的所有内容,并在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);
    });

希望这能为其他人节省一些时间

我通过在src文件夹中创建“laravel echo.d.ts”文件来解决这个问题。并按以下方式在其中声明模块

                      declare module 'laravel-echo';
然后将代码从

       import {Echo} from 'laravel-echo';


问题解决。

这不是最漂亮的,但它可以工作:

安装依赖项

yarn add laravel-echo
yarn add types/node
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);
  });

添加到tsconfig.json

"types" : ["node"],
添加到app.module.ts

yarn add laravel-echo
yarn add types/node
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);
  });