如何解决来自两个单独的 Javascript 库的类型名称冲突?

How to resolve type name conflict from two separate Javascript libraries?

首先我要说的是,我主要是一名 C# 程序员,很少涉足 JavaScript。

我可以自己写一些 JS 代码,只要它大部分是普通的。我可以处理 jQuery 和奇怪的自给自足的第 3 方库,但是当 React、Angular、Bootstrap 和其他人出现时,我无法从湿纸袋中编码自己.我也不习惯使用 npm 或任何其他类似的包管理器。

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

我目前正在创建一个非常简单的概念验证 Web 应用程序,它的客户端部分迟早会由有能力的人重建。但与此同时,我必须提供基本功能,作为下一个团队接管的粗略指南,无论何时。

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

这些是图书馆:

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

到目前为止,我已经尝试通过使用模块和 import-ing 使用不同名称的类型来解决这个问题,但它没有用...我在控制台中遇到了一堆关于“未找到导入”和“未定义 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>。但是如果我同时尝试两者,如上所示,则没有任何显示,并且向控制台输出以下错误:

Uncaught TypeError: t is undefined

这发生在 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>

如果您必须使用脚本标签,这可能是可行的方法。