第二十三节:JS模块化历史、CommonJs详解、AMD和CMD规范知悉


一. JS模块化历史

1. 什么是模块化?

(1) 到底什么是模块化、模块化开发呢?

 事实上模块化开发最终的目的是将程序划分成一个个小的结构

 这个结构中编写属于自己的逻辑代码,有自己的作用域,不会影响到其他的结构;

 这个结构可以将自己希望暴露的变量、函数、对象等导出给其结构使用;

 也可以通过某种方式,导入另外结构中的变量、函数、对象等;

(2) 上面说提到的结构,就是模块;按照这种结构划分开发程序的过程,就是模块化开发的过程;

(3). 无论你多么喜欢JavaScript,以及它现在发展的有多好,它都有很多的缺陷:

 比如var定义的变量作用域问题;

 比如JavaScript的面向对象并不能像常规面向对象语言一样使用class;

 比如JavaScript没有模块化的问题;

(4). Brendan Eich 本人也多次承认过JavaScript设计之初的缺陷,但是随着JavaScript的发展以及标准化,存在的缺陷问题基本都得到了完善。

2. 模块化的历史

(1).在网页开发的早期, Brendan Eich 开发JavaScript仅仅作为一种脚本语言,做一些简单的表单验证或动画实现等,那个时候代码还是很少的: 这个时候我们只需要讲JavaScript代码写到

导出代码

define(function() {
  const name = "why"
  const age = 18
  function sum(num1, num2) {
    return num1 + num2
  }

  return {
    name,
    age,
    sum
  }
})


导入代码

require.config({
	baseUrl: "",
	paths: {
		foo: "./src/foo",
	},
});

// 或者
// require.config({
//   paths: {
//     foo: "./foo",
//     bar: "./bar"
//   }
// })

require(["foo"], function (foo) {
	console.log("main:", foo);
});

四. CMD规范【了解】

1. 简介

    CMD规范也是应用于浏览器的一种模块化规范:

    CMD 是Common Module Definition(通用模块定义)的缩写;它也采用了异步加载模块,但是它将CommonJS的优点吸收了过来; 但是目前CMD使用也非常少了;

    CMD也有自己比较优秀的实现方案:SeaJS

2. 应用

导出代码

define(function(require, exports, module) {
  const name = "why"
  const age = 18
  function sum(num1, num2) {
    return num1 + num2
  }

  // exports.name = name
  // exports.age = age

  module.exports = {
    name,
    age,
    sum
  }
});

导入代码

define(function(require, exports, module) {
  const foo = require("./foo")
  console.log("main:", foo)
})

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

相关