无法导入和使用 typescript socket.io
Posted
技术标签:
【中文标题】无法导入和使用 typescript socket.io【英文标题】:unable to import and use typescript socket.io 【发布时间】:2020-10-22 14:16:06 【问题描述】:我正在尝试使用 npm typescript @types/socket.io 定义。 要安装,我只需:
npm install --save @types/socket.io
npm install --save socket.io
这将我的 package.json 更新为如下所示:
...
"devDependencies":
"@types/socket.io": "^2.1.8",
"socket.io": "^2.3.0"
在我的 TS 文件中,我尝试:
// client.ts
// this file is compiled to js with tsc like so: tsc client.ts
import IO from 'socket.io';
let socket = IO("http://localhost:3030");
socket.emit("message", "HELLO!");
我的 index.html 是:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
<script type="module" src="client.js"></script>
</head>
</html>
用于托管 html 的 python 服务器:
#server.py
import http.server
from http.server import HTTPServer, BaseHTTPRequestHandler
import socketserver
PORT = 8080
Handler = http.server.SimpleHTTPRequestHandler
Handler.extensions_map =
'.manifest': 'text/cache-manifest',
'.html': 'text/html',
'.png': 'image/png',
'.jpg': 'image/jpg',
'.svg': 'image/svg+xml',
'.css': 'text/css',
'.js': 'application/x-javascript',
'': 'application/wasm', # Default
httpd = socketserver.TCPServer(("", PORT), Handler)
print("serving at port", PORT)
httpd.serve_forever()
在浏览器控制台中抛出这个:
Uncaught TypeError: Failed to resolve module specifier "socket.io". Relative references must start with either "/", "./", or "../".
我目前看到我的当前路径中有一个 node_modules 文件夹以及包含 socket.io 定义的 @types 子文件夹。我在 node_modules 下也有常规的 socket.io js 文件夹。 Typescript 编译一切都很好,没有错误。
我认为在执行 npm install @types/ 之后,typescript 会巧妙地使用已安装的包而无需任何进一步的调整。
我的 tsconfig.json 看起来像:
"compilerOptions":
"target": "ES6",
"module": "ES6",
"outDir": "out",
"sourceMap": true,
"watch": true,
"strictNullChecks": true,
"noImplicitThis": true,
"noImplicitReturns": true,
"esModuleInterop": true,
"allowJs": true,
package.json:
"dependencies":
"@types/express": "^4.17.6",
"express": "^4.17.1",
"typescript": "^3.9.6"
,
"devDependencies":
"@types/socket.io": "^2.1.8",
"socket.io": "^2.3.0"
,
"type": "module"
谁能给我一些关于我可能做错了什么的想法?我是否错误地使用了 socket.io?我是否错误地导入了 socket.io?我 npm install socket.io @types 不正确吗?我的打字稿设置错了吗?
【问题讨论】:
您好,运行文件可能有问题。你的开发脚本是什么? 添加了我的开发文件。 在您的package.json
中应该有一个scripts
部分,您可以通过npm run command
运行您是否也可以添加这些部分。你如何在你的终端上运行你的服务器?
它只是一个标准的 python http 服务器。我像这样运行服务器:python server.py
我还添加了我的 package.json。我没有任何“脚本”部分
【参考方案1】:
好的,我想通了。
问题是我的客户端服务器(托管页面)需要实际的 cdn 或 js socketio 文件。此外,在创建 client.ts 时,无需进行导入。像往常一样使用 javascript 函数,因为定义文件(.d.ts - 我从 node_modules 中获取)会自动找出类型。这将转换为客户端托管的 html 页面可以与给定 CDN 一起使用的 js。
服务器可以在 node 上运行,这更容易,因为 npm install 可以将模块和 typescript 文件放在 node_modules 中,node 会自动配置和知道。
【讨论】:
你好,你能提供更多关于你的client.ts如何工作的信息吗?我发布了一个关于客户端 TS 文件 here 的问题的问题。谢谢 嘿,我已经有一段时间没有看到这个了。我不记得我是如何解决它的,哈哈……但是根据我写的内容,服务器似乎需要实际的 javascript socketio 文件。基本上是从TS文件写java脚本。以上是关于无法导入和使用 typescript socket.io的主要内容,如果未能解决你的问题,请参考以下文章
socket.io Typescript 无法创建服务器,“此表达式不可调用”