如何将JavaScript模块添加到全局范围的跨平台方式是什么?

3

我正在查看store.js的源代码,特别是它如何将自己添加到全局范围中:

if (typeof module != 'undefined') { module.exports = store }
else if (typeof define === 'function' && define.amd) { define(store) }
else { this.store = store }

我理解最后一个语句 this.store = store,但其他的呢?moduledefine函数是什么?this.store = store不会已经适用于所有浏览器了吗?

更一般地说,如何正确跨浏览器添加模块到全局作用域中?

1个回答

4
第一个案例是CommonJS,它最著名的用途是在Node.js中使用,是Asynchronous Module Definition的一种变体。模块是一个JavaScript文件,它会执行一个定义了全局模块对象的操作。该文件设置为module.exports的任何内容都将可供应用程序的其他部分使用,文件中的其他所有内容仅限于该模块私有。这里有一篇好的博客文章
第二个案例是另一种AMD变体,通常使用requirejs实现。它与CommonJs非常相似,但更常见于浏览器中。Dojo框架是基于amd的框架的一个很好的例子。Jquery社区也非常支持amd。define告诉amd系统,你正在提供一个模块,应用程序的其余部分可以通过require来获取它。
最终版本是在普通浏览器中运行的常见场景。 this 最有可能是 DOMWindow,因此存储对象在整个网页中变为全局对象。

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