测试一个JS模块是否兼容于CommonJS或AMD

4
有没有一种方法可以自动测试JavaScript模块是否与CommonJS(Node)或AMD模块格式兼容?此外,如何将其编写为Grunt任务?
兼容性是模块的一个重要特性,应该能够在某种程度上自动测试。例如,建筑配置的更改可能会产生兼容性错误,而单元测试仅使用模块的浏览器界面,例如QUnit,无法注意到这种情况。还可能存在一种可能性,即模块的兼容性启用代码(例如自制的UMD包装器)非常混乱,以至于很难说代码中的其他更改是否会对兼容性部分产生影响。
可以使用生成不同模块格式的可能正确包装器的工具。例如,grunt-umd和uRequire就是这样的工具。但是,由于它们也依赖于构建配置,因此如何确保兼容性真的存在而无需进行任何测试呢?
1个回答

2
我认为没有现成或明显的解决方案。
一般来说,您可以采取以下几种方法来解决问题:
  1. 编写一个模块格式的代码,并使用转换器生成其他模块格式。Babel(5)在这方面做得很好,但可能还有其他工具。
  2. 使用类似 esprima 的解析器对代码进行静态分析。像 https://github.com/umdjs/umd 上的“标准”包装器可能很容易检测到模式。自定义包装器可能更难,您可能需要几次修订才能完全正确。
  3. 试错法:让您的grunt任务创建文件(例如从.jade模板生成的文件),其中包含您关心的每种方式(AMD、浏览器全局变量)中的所需模块,然后“运行”它们(例如使用nightwatch或selenium),看看是否出现任何错误。(如果您要加载的模块具有依赖项,则可能非常难以正确执行)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接