首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不使用模块/导出的情况下在JavaScript文件之间共享全局

在不使用模块/导出的情况下在JavaScript文件之间共享全局
EN

Stack Overflow用户
提问于 2020-10-28 13:13:41
回答 2查看 35关注 0票数 1

我在一个文件中有一个自包含的JavaScript函数,在另一个文件中有一些Mocha BDD测试,这些测试使用nodejs require()引用它。因此,在我测试的函数中,我使用module.exports导出。在IDE/build中,这一切都很好。

现在我测试的函数实际上是一个外部虚拟端点,当部署到云实例中时,它在不支持导出或模块的JSVM沙箱(Otto)中独立运行,并且是基于ES5的(但是它嵌入了下划线库的一个版本)。如果我在部署到云时将nodejs模块定义留在其中,它会在运行时引发错误(因为Otto无法识别模块)。所以我想删除它,并使用一些普通的JS机制来链接回Mocha测试和测试运行器。

因此,我的问题是,如果我不能使用nodejs or requirejs模块,我如何将一个文件中的Mocha测试链接到另一个文件中的JS函数?我在测试文件中放置了一个函数闭包(大多数模块实现都使用),Otto对此很满意,因为它是普通的JS,但是文件中任何具有全局作用域的变量在我的测试文件中仍然不可见,所以没有链接。

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2020-10-28 14:10:18

快速浏览一下Otto文档,看起来Otto只需要整个文件,并且(正如您所说的)不识别节点中的commonjs模块。

如果你有很多文件,我建议你把它们捆绑到一个文件中,用的是webpack/browserify/etc,这是大多数人转换模块以便在浏览器中使用的方式,如果没有工具,浏览器同样无法识别commonjs模块。

或者,您可以将所有module.exports转换为简单的var声明,将这些文件连接在一起,希望不会有命名冲突。

我在文档中没有看到任何关于访问windowglobal对象来挂起全局变量的内容,这限制了您的选择

票数 1
EN

Stack Overflow用户

发布于 2020-10-29 14:12:26

我的一个同事提出了一个建议,如果你在Nodejs下运行,那么在被测试的文件中使用closure,并有条件地进行导出。我在下面添加了一个小的匿名闭包来做这件事,奥托没有抱怨。

代码语言:javascript
复制
(function () {
    if (typeof module != 'undefined') {
        module.exports = pdp_virtual_endpoint;
    }
}());

不知道为什么我没有早点想到这一点:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64566827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档