首页 > 解决方案 > 在 localhost / 无 node.js 上使用 JavaScript 进行半动态导入或读取文件

问题描述

我需要将包含单个变量的 X 文件导入更大的应用程序,其中 X 由用户指定。这需要在客户端完成,并在任何本地主机上工作。浏览器限制很好,但要求人们安装 node.js 之类的东西来运行它太多了。

这些文件可以根据目的进行定制,只要它们允许我从中获取变量 - 它们可以是 .txt、.js 或其他任何文件。我知道出于安全原因,至少对于某些方法,这可能是不可能的。下面给出了更多上下文:


我有一个 JS 应用程序,它在本地机器(或工作,服务器)上运行测试项目 - 但本地机器是默认设置。我目前正在添加第二个应用程序,该应用程序允许某些类型的用户制作自己的测试项目以在第一个应用程序中运行。

这些构建的测试项目将被单独下载,然后重命名*并由用户移动到特定文件夹。他们还下载了一个文件,该文件只是指定了他们想要的测试项目的数量,并将该文件放入同一个文件夹中。HTML 可以加载和运行这个文件,因为它有一个静态名称,而且总是只有一个;因此测试项目的数量可以通过/“硬编码”到管理测试的应用程序中有效地知道。问题是测试项目。

每个下载的测试项目前都是一个.mjs文件,其中重要的部分有点像这样:

let testItem = [[3,3],[0,1,0,0],[0,[1,1,1],[[0,0,0,0],[1,2,0,1]]];

尽管我已经为该数据尝试了各种包装器,例如:

export const testItem = [[3,3],[0,1,0,0],[0,[1,1,1],[[0,0,0,0],[1,2,0,1]]];

假设用户已成功命名它们 - 根据提供的说明,并将这些测试项目放在正确的文件夹中,等等......我现在需要将它们动态导入到我的测试中。

下面的代码是我最近一次失败的尝试:

testItemList = [];
for (var x = 0; x < numberOfTestItems; x++) {
    promise = import('TestItems/'+fileName(x)+'.js')
                    .then(m => testItemList.push(m.testItem))
}

实现此问题顶部所述目标的最佳方法是什么?

假设我上面的尝试是最好的方向,有没有办法暂停代码直到加载?

*与其让用户将文件重命名为非常具体的名称(这很容易搞砸),有没有办法将所有 .js 文件加载到文件夹中?

标签: javascriptdynamicimportuploadlocalhost

解决方案


推荐阅读