hbaaron
小狐狸
小狐狸
  • UID37668
  • 注册日期2011-11-02
  • 最后登录2012-08-09
  • 发帖数66
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:2999回复:0

Firefox扩展SDK开发人员指南(三)

楼主#
更多 发布于:2012-01-01 15:39
阳光宝盒,您的网址导航工具!
如果您喜欢这篇文章,请访问盛夏莲花博客以获取最新内容更新及评论,以及更好的阅读体验。

CommonJS既是SDK底层的基础设施,也是扩展本身底层的基础设施。

CommonJS group定义了模块和包的规范。
CommonJS 模块

一个CommonJS模块是一段可重用的JavaScript代码,它导出某些对象,从而使得它的功能对依赖于它的代码可用。为了便于使用,CommonJS定义了:

    一个名字为exports的对象,包含了一个CommonJS模块想要暴露给其它模块的全部对象。
    一个名字为require的函数。在模块中您可以使用require来导入其它模块的exports对象。在上一节中,您的translator扩展就使用了require来导入它使用的SDK模块。

image

SDK密封(freezes)了require返回的exports对象。因此如果你使用require来导入一个模块,您是不可以修改这个对象的属性的:

    self = require("self"); // Attempting to define a new property // will fail, or throw an exception in strict mode self.foo = 1; // Attempting to modify an existing property // will fail, or throw an exception in strict mode self.data = "foo";

CommonJS包

一个CommonJS包是一个封装了一系列相互联系的模块集的结构。包使得模块的分发,安装和管理变得容易。

最简化的情况下,一个包必须包含一个名为package.json的包描述文件。这个文件包含着关于这个包的信息,比如简短的描述,作者,它对其它包的依赖情况。

包必须遵守一定的目录结构,这个结构也正是cfx init为您的扩展创建的那样的结构。

CommonJS和扩展SDK

    SDK提供的JavaScript模块都是CommonJS模块,它们都被收集进了CommonJS包。
    一个扩展的JavaScript组件由一至多个CommonJS模块组成,一个完整的扩展也是一个CommonJS包。

根据CommonJS规范,如果一个包中存在一个名为main的模块,该模块将在您的程序被加载以后尽快执行。对扩展来说,这意味着一旦Firefox启用了一个扩展,则该扩展的main模块就会被执行。

因此用CommonJS的术语来说,扩展translator包含着一个包,这个包里有一个名为main的模块,这个模块导入了SDK模块:

image

因为扩展就是一个CommonJS的包,因此在一个扩展中包含多个模块是允许的,您也可以使这些模块对任何想使用它们的代码可用。

下一节中,我们将介绍如何使用SDK,以及测试您的可复用的模块。
游客

返回顶部