琥珀色CLI(amberframework.org)-v0.11.3
水晶0.27.0 [c9d1eef8f](2018-11-01)
LLVM:4.0.0
默认目标:x86_64-unknown-linux-gnu
npm 3.5.2
我正在尝试使用Crystal Lang和Amber实现套接字。我遵循了Amber Docs和Github Amber Readme.中的说明,但是,我收到一个错误。
我正在运行“ npm run watch”和“ amber watch”。更改main.js时,我可以看到Web浏览器刷新。
//main.js
import 'bootstrap';
import $ from 'jquery';
import Amber from 'amber';
let socket = new Amber.Socket('/notification')
socket.connect().then(function() {
let channel = socket.channel('chat_room:hello');
channel.join();
channel.push('message_new', {
message: "Hello Amber from WebSocket Client!"
});
channel.on('message_new', function(payload) {
console.log(payload);
});
});
// Uncaught TypeError: Cannot read property 'Socket' of undefined
// at Module../src/assets/javascripts/main.js (main.js:28)
// at __webpack_require__ (bootstrap:19)
// at Module../config/webpack/entry.js (entry.js:1)
// at __webpack_require__ (bootstrap:19)
// at bootstrap:83
// at bootstrap:83
更新:
在检查了源代码之后,我注意到main.js有2个版本。引发错误的版本位于“ webpack://.src/assets/javascripts/main.js”中。当我在运行时检查此文件时,找不到Amber。 “ ReferenceError:未定义琥珀色”文件的第二个版本位于“ /dist/main.bundle.js”中。我不确定为什么要同时提供这两种资产。这可能与npm有关吗?
最佳答案
我可以在Amber Forums上找到答案。似乎在提交过程中意外破坏了默认功能,并进行了PR。我在这里复制jackturnbull的答案。
解决方案1,将琥珀色导入行更改为:
import * as Amber from 'amber';
解决方案2:
import { Channel, Socket } from 'amber';
// Then reference as:
let socket = new Socket('/notification');
...