【问题标题】:What is the cross-platform way to add a JavaScript module to the global scope?将 JavaScript 模块添加到全局范围的跨平台方法是什么?
【发布时间】:2012-01-12 03:01:42
【问题描述】:

我正在查看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 不是已经可以在所有浏览器上运行了吗?

更一般地说,将模块添加到全局范围的正确跨浏览器方式是什么?

【问题讨论】:

    标签: javascript module-pattern global-scope self-invoking-function


    【解决方案1】:

    第一种情况是CommonJS,它在 Node.js 中使用最为显着,是 AMD (Asynchronous Module Definition) 的一种风格。模块是使用定义的全局模块对象执行的 JavaScript 文件。无论该文件设置为module.exports,应用程序的其他部分都可以使用,并且文件中的所有其他内容将仅对该模块保持私有。这是一个good blog post

    第二个是 AMD 的另一种风格,最常使用 requirejs 实现。这与 CommonJs 的想法非常相似,但在浏览器中更常见。 Dojo 框架是基于 amd 的框架的一个很好的例子。 Jquery 社区也落后于 amd 很多。 define 告诉 amd 系统你正在给它一个模块,应用程序的其余部分可以使用 require 拉入。

    最终版本是在普通简浏览器中运行的常见场景。 this 很可能是 DOMWindow,因此 store 对象在整个网页中变得全局。

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2012-05-21
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      • 2012-02-05
      相关资源
      最近更新 更多