欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

模块化 CommonJS AMD CMD

程序员文章站 2022-06-13 21:34:35
...

 

CommonJS 

CommonJS API定义很多普通应用程序使用的API,它的目标是提供一个类似Python,Ruby和Java标准库。开发者可以使用CommonJS API编写应用程序,然后这些应用可以运行在不同的JavaScript解释器和不同的主机环境中。

NodeJS是CommonJS规范的实现,webpack 也是以CommonJS的形式来书写。

CommonJS规范,一个单独的文件就是一个模块。该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性,把希望输出的内容放入一个对象,用module.exports暴露出来,供其他模块用require加载。

nodejs 和 webpack 都是根据

//模块定义 model.js

function fun1(){
   ...
}
function fun2(){
}

module.exports = {
    fun1: fun1,
    fun2: fun2
}

//加载模块

var myModel= require('./model.js');

nameModule.fun1();
nameModule.fun2();

  

浏览器不兼容CommonJS的根本原因,在于 module exports require global缺少四个Node.js环境的变量。

 

AMD

AMD 即Asynchronous Module Definition,中文名是异步模块定义的意思。它是一个在浏览器端模块化开发的规范,AMD推崇依赖前置

使用AMD规范进行页面开发需要用到RequireJS,

 

看一个使用requireJS的例子

     //定义模块 fun.js
     define(function (){
    var add = function (x,y){
      return x+y;
    };

    return {
      add: add
    };

  });
     //加载模块 myModel.js
  require(['fun'], function (fun){

    alert(fun.add(1,1));

  });

require()函数在加载依赖的模块的时候是异步加载的,只有前面的模块都加载成功后,模块内方法才会执行,解决了依赖性的问题和浏览器卡死的问题。

CMD

CMD 即Common Module Definition通用模块定义,CMD规范是国内发展出来的。

在CMD中 一个文件就是一个模块,所以可以用文件名作为模块ID  ,CMD推崇依赖就近,可以把依赖写进你的代码中的任意一行.

但是需要牺牲一些性能在代码运行时先找出这些依赖。toString   正则  -》 require 

define(function(require, exports, module) {
  var $ = require('jquery.js')
  ....
});

 

posted on 2018-06-29 10:09 sitenhan 阅读(...) 评论(...) 编辑 收藏