如何在vanilla javascript中从客户端导入 socket.io



>socket.io的官方文档有一个从客户端导入和使用socket.io的示例,如下所示:

索引.html

<body>
  <script src="/socket.io/socket.io.js"></script>
  <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
  <script>
    $(function () {
      var socket = io();
      // Some other code in here...
    });
  </script>
</body>

现在我正在尝试将我的js代码放在main.js文件中(在public文件夹中的index.html旁边(。这就是我所做的,它给了我Unexpected identifier

主.js

import io from "../socket.io/socket.io.js"
const socket = io()
// Some other code here...

在这种情况下,导入socket.io的正确形式是什么?

你可以这样做:

把它放在你的索引中.html

<body>
  <script src="/socket.io/socket.io.js"></script>
  <script src="main.js">
  // some code here...
</body>

并把它放在你的主要.js

var socket = io()

有多种方法,最简单的一种:

您可以只使用socket.io-client CDN 或从dist文件夹 socket.io 客户端 github 存储库提供服务。它会将io对象添加到window 。这在数学上意味着io将是您可以使用的全局变量。

您需要使用 script 标记将其添加到您的 html 页面。

您可以将其用作:

<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript">
    var socket = io('http://localhost');
      socket.on('news', function (data) {
        console.log(data);
        socket.emit('my other event', { my: 'data' });
    });
</script>

或者,您可以使用webpackbrowserify来构建JS文件并将其导入index.html中。您可以在此处查看示例

为什么import不起作用?

因为import是ES6运算符。开箱即用的浏览器不支持这一点。哎呀,即使是节点也不支持importexport。这就是为什么您需要将它们转译(转换(为 ES5 语法,以便即使是浏览器也可以运行它。您可以查看可靠的Babel REPL并将 Es6 转换为 Es5 以获得感觉。

如果您遵循 socket.io 文档,则应添加这些行

  <body>
    <ul id="messages"></ul>
    <form id="form" action="">
      <input id="input" autocomplete="off" /><button>Send</button>
    </form>
  </body>
  <script src="/socket.io/socket.io.js"></script>
  <script src="main.js"></script>
</html>

并确保将这些行添加到索引中.js

const path = require("path"); app.use(express.static(__dirname));

<!DOCTYPE html>
<html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Document</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.4/socket.io.js"> 
    </script>
    <script>
        var socket = io(SOCKET_ENDPOINT);

最新更新