Socket.io-client 没有默认导出

T99*_*ots 5 javascript socket.io polymer es6-modules

我目前正在开发一个聚合物 3 项目,其中一个组件需要导入 socket.io-client,但无论我尝试什么,我都无法让它工作。

我试过了:

import io from 'socket.io-client';
Run Code Online (Sandbox Code Playgroud)

我得到什么:

未捕获的语法错误:请求的模块“../../node_modules/socket.io-client/lib/index.js”不提供名为“default”的导出

同样的:

import io from 'socket.io-client/dist/socket.io.js';
Run Code Online (Sandbox Code Playgroud)

我得到什么:

未捕获的语法错误:请求的模块“../../node_modules/socket.io-client/dist/socket.io.js”不提供名为“default”的导出

我也试过这个:

import * as io from 'socket.io-client'
Run Code Online (Sandbox Code Playgroud)

我得到什么:

参考错误:在 index.js:4 中未定义要求

和这个:

import * as io from 'socket.io-client/dist/socket.io.js'
Run Code Online (Sandbox Code Playgroud)

我得到什么:

类型错误:无法读取未定义的属性“缓冲区”

后来我查看了 socket.io-client 的代码,代码中似乎没有使用任何 es6 导出,这可以解释为什么它确实不起作用。

我觉得奇怪的是,导入语法甚至列在他们的网站上作为支持。我想我可能使用了错误的构建或其他东西,但我不知道为什么会是这样,因为"socket.io-client": "^2.1.1"如果有人知道我做错了什么,我会很高兴听到。

eva*_*yly 1

Polymer 需要使用 ES 模块 - 由于 socket.io-client 无法在 package.json ( https://github.com/rollup/rollup/wiki/pkg.module ) 中包含模块,Polymer 必须依赖于以下来源:用ES模块编写。Socket.io-client 两者都不提供。所以你只能将它导入到 index.html 或你的模板之一中,或者使用另一个库(或者使用 webpack / gulp 做一些疯狂的事情)...

索引.html

<script src="node_modules/socket.io-client/dist/socket.io.js"></script>
Run Code Online (Sandbox Code Playgroud)

我是在 webcomponents 导入之后导入的。

在组件中:

const socket = io(...);
Run Code Online (Sandbox Code Playgroud)

作品。