无法与琥珀色或NPM进行Websocket连接,不确定哪个



琥珀色 CLI (amberframework.org) - v0.11.3晶体 0.27.0 [c9d1eef8f] (2018-11-01)LLVM:4.0.0默认目标:x86_64-unknown-linux-gnunpm 3.5.2

我正在尝试使用 Crystal Lang 和 Amber 实现套接字。我遵循了Amber Docs和Github Amber Readme的说明。但是,我收到一个错误。

我正在运行"npm 运行手表"和"琥珀色手表"。当我对 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"。当我在运行时检查此文件时,找不到琥珀色。"引用错误:琥珀色未定义" 该文件的第二个版本位于"/dist/main.bundle.js"。我不确定为什么这两种资产都被服务。这可能是 npm 的问题吗?

我能够在琥珀论坛上找到答案。似乎默认功能在提交过程中意外损坏,并且已经进行了 pr。我在这里复制杰克特恩布尔的答案。

解决方案 1,将琥珀色导入行更改为:

import * as Amber from 'amber';

解决方案 2:

import { Channel, Socket } from 'amber';
// Then reference as:
let socket = new Socket('/notification');
...

最新更新