如何通过两个独立的Javascript库解决类型名称冲突?

问题描述

首先,我主要是C#程序员,他很少尝试使用JavaScript。

我可以为自己编写一些JS代码,只要它基本上是简单的即可。我可以处理jQuery和奇怪的自给自足的第三方库,但是当React,Angular,Bootstrap和其他人进入场景时,我无法从湿纸袋中编写代码。我也不习惯使用npm或任何其他类似的包管理器。

这从来都不是我的工作,也不是我的兴趣,所以我从未去过那里。每当我编写一些JS代码时,我都会在<script>标签中引用所需的JS文件,然后尽可能直接地使用它们。

我目前正在创建一个非常简单的概念证明网络应用程序,迟早有能力的人员将重新构建其客户端部分。但是与此同时,我必须提供准系统功能,只要有可能,它就会成为下一个团队接任的粗略指导。

我选择了两个似乎易于使用的库,并且分别使用时可以完成工作。但是,当我尝试在同一页面上一起使用它们时,我遇到了一个问题:它们的主要类型都使用相同的名称,而且我似乎无法消除它们之间的歧义。

这些是库:

它们都声明了一个名为jsoneditor的类型,只要我不一次引用两个库就可以使用。

到目前为止,我尝试通过使用模块和使用不同名称import-类型来解决此问题,但这没有用...我在控制台中遇到了很多有关“导入”的错误未找到”和“未定义e”,这使我认为我正在解决错误

如果可能,我将如何使用普通JS解决此问题?

更新:根据建议,我提供了一个最小的示例来演示我的用法

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Test Page</title>
    <link href="/lib/jsoneditor/jsoneditor.min.css" rel="stylesheet" type="text/css">
</head>
<body>

<div id="container">
    <div id="editor" style="width: 300px; height: 200px;"></div>
    <div id="form"></div>
</div>

<!--library 1: https://github.com/josdejong/jsoneditor -->
<script src="/lib/jsoneditor/jsoneditor.min.js"></script>

<!--library 2: https://github.com/jdorn/json-editor -->
<script src="/lib/jsonform/jsonform.min.js"></script>

<script>
    // Library 1: The JSON code editor.
    var editor = new jsoneditor(document.getElementById("editor"),{ mode: "code" });
   
    // Library 2: The form builder.
    var form = new jsoneditor(document.getElementById("form"),{
        ajax: true,schema: {
            $ref: "/api/describe/service/test"
        }
    });
</script>

</body>
</html>

如果我注释掉一个库的使用(以任何一个为准),另一个库将按预期工作,并且内容显示在相应的目标<div>上。但是,如果如上所述我一次尝试两次,则不会显示任何内容,并且以下错误输出到控制台:

未捕获到的TypeError:t未定义

这种情况发生在var editor = new jsoneditor行,这让我认为第二个库中的类型会覆盖第一个库并导致问题。

这对我来说是可以理解的,并不是问题本身。问题是我不知道如何导入两种jsoneditor类型,以便可以分别引用它们。

解决方法

代码编辑器的维护者(JSON编辑器,而不是JSON Schema Form Builder)过去已经解决并解决了一个与此有关的问题:https://github.com/josdejong/jsoneditor/issues/270

他推荐的解决方案如下:

<script src="assets/jsoneditor/dist/jsoneditor.min.js"></script>
<script>
  var JSONEditorA = JSONEditor;
</script>
<script src="assets/json-editor/dist/jsoneditor.min.js"></script>
<script>
  var JSONEditorB = JSONEditor;
</script>

如果必须使用脚本标签,这可能是解决方法。