无法从模块导入“ Echo”:未捕获的ReferenceError:未定义Echo

时间:2019-01-30 07:28:36

标签: javascript laravel class export laravel-echo

我正在测试laravel / redis / socket.io消息传递功能。在初始设置过程中,我注意到echo.js(无论是NPM的版本还是GIT的“编译”到模块)都会导致错误。 “未捕获的ReferenceError:未定义Echo”

我很沮丧,因为从技术上讲应该可以使用,有帮助吗?

1)我已经使用了开箱即用的echo.js 2)我已经从GIT laravel-echo TypeScript存储库中构建了一个js包 3)我检查了脚本是否正在加载

window.Echo.channel('everywhere')
    .listen('AnnouncementEvent', (e) => {
        console.log(e);
    });

我想找出一个应该起作用的解决方案中缺少的东西,并使echo.js开始在测试中起作用

2 个答案:

答案 0 :(得分:0)

您在这里缺少一些拼图...

安装predis composer require predis/predis

安装类似https://github.com/tlaverdure/laravel-echo-server这样的socket.io服务器

安装socket.io客户端库npm install --save socket.io-client

在boostrap.js文件中实例化Echo:

import Echo from "laravel-echo"

window.io = require('socket.io-client');

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001'
});

https://laravel.com/docs/5.7/broadcasting

答案 1 :(得分:0)

我已经解决了我的问题...我不确定它是否是正确的分析和解决方案,但是仍然有效。

使用laravel echo 版本发行了三个不同的echo*.js文件:

echo.js -一个ES5-ES6模块,即使已设置type='module'集,也无法在浏览器中工作

echo.iife.js -库的浏览器兼容版本

echo.common.js -一个nodejs commonjs模块

我发现必须包含echo.iife.js才能使此Javascript Echo 类在浏览器中正确注册并公开给脚本。