Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用typescript中的javascript库(具有继承的javascript依赖项) 上下文_Javascript_Typescript_Browser_Strophe_Strophe.js - Fatal编程技术网

使用typescript中的javascript库(具有继承的javascript依赖项) 上下文

使用typescript中的javascript库(具有继承的javascript依赖项) 上下文,javascript,typescript,browser,strophe,strophe.js,Javascript,Typescript,Browser,Strophe,Strophe.js,我正在用纯文本脚本构建一个与聊天服务器通信的项目。对于该通信,我使用strophe.js lib Strophe lib有三种风格:commonjs、esm和umd。根据我搜索的内容,我并不真正理解这些格式之间的区别: commonjs用于节点 网络应用的esm umd是通用的 基于此,我可以使用esm或umd,因为此应用程序旨在在浏览器中运行 我编写了一个Typescript文件作为strophe库的包装器。我是这样导入它的: import*as core from./dependenci

我正在用纯文本脚本构建一个与聊天服务器通信的项目。对于该通信,我使用strophe.js lib

Strophe lib有三种风格:commonjs、esm和umd。根据我搜索的内容,我并不真正理解这些格式之间的区别:

  • commonjs用于节点
  • 网络应用的esm
  • umd是通用的
基于此,我可以使用esm或umd,因为此应用程序旨在在浏览器中运行

我编写了一个Typescript文件作为strophe库的包装器。我是这样导入它的:

import*as core from./dependencies/strophe.umd.js';//使用UMD
从“./dependencies/strophe.esm.js”导入核心;//使用ESM
常数Strophe=堆芯Strophe;
// ...
//用法示例:
this.conn=新选通连接(options.Connection,options.options);
我的问题 使用ESM格式时: 我可以看到界面定义,调用其功能等。一切都很好,但浏览器抛出:
未捕获类型错误:解析模块说明符“abab”失败。相对引用必须以“/”、“/”或“./”开头

使用UMD格式时: 起初未显示错误,但未正确导入Strophe。尝试调用connect函数时,会引发此错误:

未捕获类型错误:无法读取未定义的属性“连接”

更新
沙箱:

为了测试这一点,我运行
tsc
,然后运行
liveserver
来提供文件

tsconfig.json
{
“扩展”:“@tsconfig/recommended/tsconfig.json”,
“编译器选项”:{
“目标”:“es2015”,
“模块”:“es2015”,
“baseUrl”:“src”,
“outDir”:“build”,
“sourceMap”:false,
“严格”:是的,
“esModuleInterop”:正确,
“skipLibCheck”:正确,
“ForceConsistentCasingFileNames”:true,
“allowJs”:正确,
“noImplicitAny”:错,
“moduleResolution”:“节点”,
“removeComments”:正确,
“lib”:[“es2018”,“dom”],
“类型”:[“玩笑”,“节点”],
“路径”:{
“@core/*”:[”/src/core“]
}
},
“包括”:[“src/***/.ts”]
}

最好通过npm或Thread等包管理器将Strophe.js添加为依赖项。看起来您已经手动将它们放置在名为
依赖项
的文件夹中

添加依赖项:
添加strophe.js

添加类型声明:
warn add-D@types/strophe.js

这将把Strophe.js下载到您的
node\u modules
文件夹中

在代码中导入它:

import { Strophe } from "strophe.js";
this.conn = new Strophe.Connection(options.connection, options.options);

如果你以类似的方式重新创建一个示例,它会更容易帮助你。谢谢!我没有strophe.js依赖项。尽管当我在浏览器中打开html时,控制台中会显示此错误:
uncaughttypeerror:解析模块说明符“strophe.js”失败。相对引用必须以“/”、“/”或“./”开头
太好了,您制作了一个codesandbox!看起来您当前的问题与导入Strophe.js依赖项无关。至少我没有在你的代码沙盒中看到这个问题。如果你仍然有问题,我建议你减少你的代码沙盒,直到它是你能得到的最小的可复制版本,然后在这里提交一个新的问题。另外,你介意接受答案吗,@adrisons?我认为这与Strophe.js依赖性有关,试着在代码沙盒中提交clic。我会接受答案,当我可以它的工作。无论如何,您都会收到赏金:)这似乎只有在
jid
字段没有值时才会发生。我假设,如果按钮没有值,那么将其设为无操作按钮是有意义的。至于“工作”,我不知道你到底想干什么。