CommonJS和AMD
博客专区 > 丿wolf 的博客 > 博客详情
CommonJS和AMD
丿wolf 发表于11个月前
CommonJS和AMD
  • 发表于 11个月前
  • 阅读 161
  • 收藏 0
  • 点赞 0
  • 评论 0

华为云·免费上云实践>>>   

CommonJS和AMD

CommonJS

JavaScript是一个基于对象的编程语言。官方JavaScript标准定义的API是为了构建基于浏览器的应用程序。然而,并没有定义一个应用于更广泛的应用程序的标准库。CommonJS API定义了很多普通应用程序(主要指非浏览器应用程序)使用的API,从而填补了这个空白,它的终极目标是打造一个类似于java、python的标准库。这样,开发者可以使用CommonJS API编写应用程序,然后这些应用可以应运行在不同的JavaScript的解释器和不同的主机环境中。在兼容CommonJS的系统中,你可以使用JavaScript做:

  • 服务器端的JacaScript应用程序
  • 命令行工具

服务器端的Node.js遵循了CommonJS规范,该规范的核心思想是允许模块通过require方法来同步加载所依赖的其他模块,然后通过exportsmodule.exports来导出需要暴露的接口。

require('module')
require('./file.js')
exprots.sayHello = function () {
	console.log('hello')
}
module.exports = fn

优点:

  • 服务器端模块便于重用
  • NPM中已经有了将近20万个可以使用模块包
  • 简单并且容易使用

缺点:

  • 同步的模块加载方式不适合在浏览器环境中,同步意味着阻塞加载,浏览器资源是异步加载的
  • 不能非阻塞的并行加载多个模块

AMD

AMD规范其实只有一个主要接口define(id?, dependencies?, factory),它要在声明模块的时候加载所有的依赖dependencies,并且还要当做形参传到factory中,对于依赖的模块提前进行,依赖前置。

define("module", ["dep1", "dep2"], function (d1, d2) {
	return value
})
require(["module", "../file"], function (module, file) {/*TODO...*/})

优点:

  • 适合在浏览器环境中异步加载模块
  • 可以并行加载多个模块

缺点:

  • 提高了开发成本,代码的阅读和书写比较困难,模块定义方式的语义不顺畅
  • 不符合通用的模块化思维方式,是一种妥协的实现
标签: CommonJs AMD
共有 人打赏支持
粉丝 0
博文 1
码字总数 524
×
丿wolf
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: