繁体   English   中英

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

[英]Sharing global between JavaScript files without using modules/exports

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

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

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

有什么想法吗?

快速浏览一下 Otto 文档,看起来 Otto 只想要整个文件,并且(如您所说)不从 node.js 中识别 commonjs 模块。

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

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

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

我的一位同事提出了一个建议,如果您在 Nodejs 下运行,则在被测试的文件中使用闭包,该文件被部署到云实例中,并有条件地进行导出。 我在下面添加了一个小的匿名闭包来做到这一点,Otto 没有抱怨。

(function () {
    if (typeof module != 'undefined') {
        module.exports = pdp_virtual_endpoint;
    }
}());

不知道为什么我没有早点考虑这个:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM