【发布时间】:2021-08-03 12:46:54
【问题描述】:
在某些情况下,我正在处理单个 js 文件环境,例如 Grease Monkey 脚本,并且我想添加一个节点测试运行器 (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 环境中。
我面临的问题是我想在允许顶级等待的环境中做类似的事情。如果我尝试执行前面的示例,我会收到 SyntaxError SyntaxError: await is only valid in async function。当然,节点允许带有标志--experimental-top-level-await 的顶级等待,但这需要代码处于模块模式。而且模块模式不允许module.exports。
有没有办法在模块模式下做动态导出来避免在其他js环境中出现语法问题?还是为了避免未执行的代码分支出现 await 语法错误?
【问题讨论】:
标签: javascript node.js es6-modules