Javascript ES模块导入-始终可以这样做吗?尝试导入socket.io-client失败的示例

Javascript ES模块导入-始终可以这样做吗?尝试导入socket.io-client失败的示例,javascript,socket.io,es6-modules,preact,Javascript,Socket.io,Es6 Modules,Preact,我正在尝试使用“无构建”过程,因此我在html文件中使用了一个普通模块脚本(在Preact文档之后): 我想从ES模块导入socket.io客户端。我知道我可以将窗口封装在我自己的JS文件中,然后将其导入html中的模块脚本中,但我正在尝试这样做,但它不起作用: import io from '/socket.io.js'; // after copying socket.io.js to my public dir import { io } from 'https://cdnjs.c

我正在尝试使用“无构建”过程,因此我在html文件中使用了一个普通模块
脚本
(在Preact文档之后):

我想从ES模块导入socket.io客户端。我知道我可以将
窗口
封装在我自己的JS文件中,然后将其导入html中的模块脚本中,但我正在尝试这样做,但它不起作用:

  import io from '/socket.io.js'; // after copying socket.io.js to my public dir
  import { io } from 'https://cdnjs.cloudflare.com/ajax/libs/engine.io-client/3.5.0/engine.io.js'; // I have tried several variations of urls and what is imported
从以下几点判断:

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

通过“polyfill”ed(如果这是正确的术语),commonjs全局函数,如
模块
,在可能的webpack包包中,即
socket.io.js
——很可能该库不支持ES模块

我可能会一次又一次地面对这个问题,所以我决定重新开始构建步骤

我的问题是-有没有办法解决“第三方库不支持开箱即用的ES模块导入”?也许在我这方面做一点工作,我就可以绕过这个问题,尝试在开发过程中不需要构建步骤就可以完成一个小项目

有没有办法解决“不支持ES模块开箱即用导入的第三方库”

不幸的是,不,至少不总是这样。浏览器不可能以本机方式导入非ES模块的内容。但是,如果您可以访问原始源代码,并且源代码本身是作为ES模块编写的(然后传输/捆绑),那么您有时可以自己构建ES模块


对于socket.io,在TypeScript中承载源代码,它使用
import
/
export
。不幸的是,他们的代码还使用了
require()
和其他npm包,这最终意味着它不能简单地转换为ES模块。

很公平——我认为可能是这样。迫不及待地等待deno获得更多牵引力。谢谢
<script src="/socket.io/socket.io.js"></script>

<!-- in previous module script: -->
  const socket = window.io();

  socket.on('connect', () => {
    console.log('socket id>>', socket.id);
  });
  import io from '/socket.io.js'; // after copying socket.io.js to my public dir
  import { io } from 'https://cdnjs.cloudflare.com/ajax/libs/engine.io-client/3.5.0/engine.io.js'; // I have tried several variations of urls and what is imported