当前位置: 首页 > 知识库问答 >
问题:

单文件环境下节点动态导出和顶级等待

朱皓
2023-03-14

在某些情况下,当我在一个js文件环境中工作时,例如,油脂猴脚本,我想添加一个节点测试运行程序(mocha)。Js非常灵活,允许处理这两种环境。做一些类似于:

if (typeof module !== 'undefined') {
  module.exports = {
    myFunctionToTest
  }
} else {
   // Code to be executed in the real environment
}

function myFunctionToTest () {

}

这种方法很好,因为我可以简单地在另一个文件中编写mocha测试:

const {myFunctionToTest} = require('./source.js')

describe('My test', // ...

但我也可以将脚本复制粘贴到单个js环境中。

我面临的问题是,我想在允许顶级等待的环境中做类似的事情。如果我尝试执行上一个示例,我会得到一个SyntaxErrorSyntaxError:await仅在异步函数中有效。当然,node允许使用标志——实验性顶级等待,进行顶级等待,但这要求代码处于模块模式。和模块模式不允许使用模块。出口。

在模块模式下,是否有方法进行动态导出,以避免在其他js环境中出现语法问题?或者避免在未执行的代码分支中出现等待语法错误?


共有1个答案

锺离阿苏
2023-03-14

穷人的解决办法是伪造捆绑机:

let functionToTest
beforeEach(async function () {
  const moduleCode = fs.readFileSync('./myscript.js').toString()
  const myFunctionCode = `async function myFunction (module) { ${moduleCode}}`
  eval(myFunctionCode)
  const fakeModule = {}
  await myFunction(fakeModule)
  functionToTest = fakeModule.exports.functionToTest
})
 类似资料:
  • 我在运行节点版本14.15.3

  • 我有节点14.13.0,并且即使使用,top-level wait也不能工作。 我做错了什么?

  • 最近我开始使用node。js。当我在我的一个项目中完成一个需求时,我面临一个问题,我应该能够将一些数据动态写入csv文件,并让它作为弹出窗口提示用户下载(如我们通常看到的,带有保存和取消选项)。在谷歌搜索了一段时间后,我决定使用csv npm模块https://github.com/wdavidw/node-csv-parser.我能够将数据写入文件并使用此模块进行保存。我想提示一个弹出窗口来保存

  • 问题内容: 我决定将设置保存在xml文件中,因为field只接受一个值。 我的XML文件就像 谁能建议我一个简单的PHP脚本来读取,编辑,添加和删除节点和节点值? 问题答案: 如果您的XML真的那么简单,可以使用CRUD。SimpleXml将XML解析为SimpleXmlElements的树结构。简而言之,您可以像这样使用它: 请参考PHP手册以获取更多用法示例和API描述。 在阿里纳斯,如果你真

  • 给定一个矩阵。您需要打印矩形中左上角和右下角的所有数字的总和。 我使用自顶向下的动态规划方法来解决这个问题。查看我的代码。 输入 输出 预期产出 但当输入查询时,这会抛出非常随机的数字。我没有得到我在这里缺少的东西。有人能帮忙吗? 谢谢✌️

  • 我有以下代码,这是通过Express调用的API。我需要返回一个引号数组,以及与这些引号相关联的部分数组。为此,我使用async/wait,它在我的引号变量中正常工作,但我在部件变量中得到一个空数组。 我相信这与部分结果是挂起的promise有关,因为当我在循环中记录我的结果时,我得到了适当的值。 我怀疑我一定是误解了async/await是如何工作的,或者promises/Promise是如何工