LoginSignup
0
0

More than 5 years have passed since last update.

CommonJS 和 AMD

Last updated at Posted at 2016-08-23

基本上可以这样说,对于 CommonJS 和 AMD 二者,能把他们发扬光大的不得不说 nodejsrequire.js 了.

CommonJS

CommonJS称之为一个 project, 目的是用来定义声明 Javascript 在浏览器之外的一个生态系统.(如服务器端或者桌面程序), 起源于2009年工作于 Mozilla 的工程师 Kevin Dangoor, 当时的名字叫做ServerJs. 然后在2009年8月改名为CommonJS 而且放出来了兼容的 APIs. 在2013年五月的时候, Node的包管理工具 npm的作者 Isaac Z. Schluter说对于 Node.js, CommonJS 已经过时, Node.js 的核心开发工程师应该避免使用它.

从官网的描述来看,

http://www.commonjs.org/

说 Javascript 是一个很牛的但是更多的面向浏览器的动态语言,但是呢其实 javascript 可以做更多的事情, 而在做更多的事情的时候就出现很多其他的需求, 这个时候我们就需要一个更加丰富的 APIs 来满足他们. 提供无线丰富的标准库正如 Python, Ruby还有 Java 那样. 初衷就是工程师可以使用 CommonJS 的 API 来写更多的跨平台的基于 Javascript运行时的宿主环境之上. 通过兼容 CommonJS 的系统你可以:

  • 服务器端 js 应用
  • 命令行工具
  • 桌面 GUI 应用
  • Hybird 混合

我 fuck, 到底我还是没有找到什么是 CommonJS, 很多地方就是说, 它是一个简单的声明定义,用来定义如何声明一个module, 然后如何让 module 和其他的 module 一起工作.

我们定义一个CommonJS规范下的 module, 它呢其实就是一块可复用的 js 代码, 如何复用? 就是在定义声明这个 module 的时候, 定义导出一些对象, 让他们可以被其他代码依赖使用. 不同于 AMD, 这里并没有什么函数定义来包裹模块.

如何定义一个 CommonJSmodule 呢?
它有2个主要部分组成:

  • 一个就是自由的变量exports, 它就是将要暴露出来给其他模块的.
  • 还有一个require 函数, 它用来让模块导入一个被export 的变量.

http://wiki.commonjs.org/wiki/Modules/1.1

  1. require, 定义函数
  2. exports module 定义的对象
  3. module, 一个对象

如:

// 假如我们新建一个 math.js 的文件
//我们先定义一个函数

function add(){
 var sum = 0, i =0, args =argurments, 1 = args.length
 while(i<1){
   sum += args[i++];
 }
 return sum

}
exports.add = add

//以上我们就完成了一个 CommonJS 的 module

//然后我们尝试如何使用它
// 定义一个 increment.js
var add = require('math').add;
exports.increment = function(val){
 return add(val,1);
}


// 然后我们再定义一个

var inc = require('increment').increment;
var a =1;
inc(a); //2

module.id == 'program';


AMD

requirejs

requirejs 如是说:

RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node. Using a modular script loader like RequireJS will improve the speed and quality of your code.

Asynchronous module definition, 一个 javascript 的定义. 定义了 API 用来定义和编写 module 已经处理他们的依赖. 如果需要可以异步加载他们.使用AMD 可以有以下的好处:

  • 网站性能提升,AMD 可以让加载 js 的变得更小,只有需要的时候才去加载.
  • 减少页面错误,AMD 会帮助开发人员解决依赖的问题

https://en.wikipedia.org/wiki/Asynchronous_module_definition

除了上面的好处之外, 它还能够让工程师把代码封装到更小的, 更加具有逻辑性的工程中.部署的时候可以用它的 API 来处理 js 文件

关于更多的 AMD 详细看这里

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0