琥珀色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 DocsGithub 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');
...

10-04 21:22