Javascript Socket.io-client无默认导出

Javascript Socket.io-client无默认导出,javascript,socket.io,polymer,es6-modules,Javascript,Socket.io,Polymer,Es6 Modules,我目前正在polymer 3的一个项目中工作,其中一个组件需要导入socket.io-client,但不管我怎么做,我都无法让它工作 我试过: import io from 'socket.io-client'; 我得到的是: 未捕获的语法错误:请求的模块 “../../node_modules/socket.io client/lib/index.js”未提供 导出名为“默认” 这一点也一样: import io from 'socket.io-client/dist/socket.io.j

我目前正在polymer 3的一个项目中工作,其中一个组件需要导入socket.io-client,但不管我怎么做,我都无法让它工作

我试过:

import io from 'socket.io-client';
我得到的是:

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

这一点也一样:

import io from 'socket.io-client/dist/socket.io.js';
我得到的是:

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

我也试过:

import * as io from 'socket.io-client'
我得到的是:

ReferenceError:require未在索引中定义。js:4

这是:

import * as io from 'socket.io-client/dist/socket.io.js'
我得到的是:

TypeError:无法读取未定义的属性“Buffer”

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


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

Polymer需要使用ES模块-因为socket.io-client在package.json()中没有模块,聚合物必须依赖于使用ES模块写入的源。Socket.io-client两者都不提供。因此,您只能在index.html或某个模板中导入它,或使用另一个库(或使用webpack/gulp做一些疯狂的事情)

index.html

<script src="node_modules/socket.io-client/dist/socket.io.js"></script>

工作。

检查socket io客户端他们有一个所谓的“UniversalModuleDefinition”,在导入脚本时运行,您可以在这里看到它:

(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
    module.exports = factory();
else if(typeof define === 'function' && define.amd)
    define([], factory);
else if(typeof exports === 'object')
    exports["io"] = factory();
else
    root["io"] = factory();
})(this, function() {
    ... //does io setup factory presumably
}
问题

如果我们尝试使用
import./socket.io.js'
,(即我们只是使用vanilla js,而没有使用webpack、amd或requirejs)导入,那么
根目录是未定义的

一个解决方案

修改socket io client js以检查此未定义的根并将其设置为窗口,如下所示:

if(root === undefined){
    root = window;
}
root["io"] = factory();
然后您只需执行
import./socket.io.js'
,您就可以在全局范围内使用
io()

试试这个


import*as socketIO from'socket.io'
我遇到了同样的问题,我找不到一个可以工作的网络组件。
if(root === undefined){
    root = window;
}
root["io"] = factory();