searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

JS模块化加载方式

2023-05-26 06:22:48
65
0

AMD----- 依赖前置 (require.js)

引入模块-----require([ ],callback)

定义模块----- define([],callback)

CMD ----- 依赖就近引入原则(seaJs)

引入模块 (遵循就近原则)

定义模块----- define([],callback)

CommonJS

引入模块-------require('模块路径')

定义模块 ------ exports.模块名= function(){ //some code ... }

ES6

引入模块 ----- import

定义模块 ----- export、export default

 

 

使用方式和示例

AMD

步骤如下:
1、引入require.js,并用data-main指定入口的js文件。
2、在入口的js文件内用require.config配制各个模块的路径。
3、define定义js模块文件
4、require引入js模块文件

注意: require([ ],callback)首先异步加载数组内的模块,随后才会去执行callback;

示例:

index.html

<script src="https://cdn.bootcss.com/require.js/2.3.5/require.js" defer async="true" data-main="js/main"></script>

js/main.js (使用require引入模块)

require.config({
  baseUrl: "./",
  paths: {
    "jquery": "jquery.min",
     "math":"math",
    "getStyle":"getStyle"
  }
});
require(['jquery','math','getStyle'], function ($,math,getStyle){
     let total = math.add(109,23);
     console.log(total);
     getStyle.setRedBg('body','#dddddd'); 
     // some code ......
});

js/math.js 自定义的不依赖其它模块的模块 (使用define定义模块)

//不依赖其它模块的,自定义的模块
define(function(){
	var add = function (x,y){
    return x+y;
  };

  return {
    add: add
  };
})

js/getStyle.js 自定义的依赖其它模块的模块 (使用define定义模块)

define(['jquery'],function($){
	var setRedBg = function(tag,color){
		$(tag).css('background',color);
	}
	
	return {
		setRedBg:setRedBg
	}
	
})

2.2 CMD

CMD与AMD的区别:

  • 对于依赖的模块,AMD是提前执行,CMD是延迟执行。
    (不过RequireJS从2.0开始,也改成可以延迟执行)

  • AMD推崇依赖前置,CMD推崇依赖就近。

define(function (requie, exports, module) {
    //依赖可以就近书写
    var a = require('./a');
    a.test();  
    ...
    //软依赖
    if (status) {
        var b = requie('./b');
        b.test();
    }
});

2.3 CommonJs规范

在模块中,通过require()方法来引入外部的模块。
上下文提供了exports 对象导出当前模块的方法和变量, 并且它是唯一导出的出口。
在模块中还存在一个module对象,它代表模块自身,而exports是module的属性。

导出模块

exports.math = function(){
   //some  code ...
}

引入模块

var math = require('math')

2.4 ES6 Module

 ES6 的模块自动开启严格模式,不管你有没有在模块头部加上 use strict;。

 模块中可以导入和导出各种类型的变量,如函数,对象,字符串,数字,布尔值,类等。

 每个模块都有自己的上下文,每一个模块内声明的变量都是局部变量,不会污染全局作用域。

 每一个模块只加载一次(是单例的), 若再去加载同目录下同文件,直接从内存中读取。

/*-----export [test.js]-----*/
let myName = "Tom";
let myAge = 20;
let myfn = function(){
    return "My name is" + myName + "! I'm '" + myAge + "years old."
}
let myClass =  class myClass {
    static a = "yeah!";
}
export { myName, myAge, myfn, myClass }
 
/*-----import [xxx.js]-----*/
import { myName, myAge, myfn, myClass } from "./test.js";
console.log(myfn());// My name is Tom! I'm 20 years old.
console.log(myAge);// 20
console.log(myName);// Tom
console.log(myClass.a );// yeah!

 

0条评论
0 / 1000
w****n
2文章数
0粉丝数
w****n
2 文章 | 0 粉丝
w****n
2文章数
0粉丝数
w****n
2 文章 | 0 粉丝
原创

JS模块化加载方式

2023-05-26 06:22:48
65
0

AMD----- 依赖前置 (require.js)

引入模块-----require([ ],callback)

定义模块----- define([],callback)

CMD ----- 依赖就近引入原则(seaJs)

引入模块 (遵循就近原则)

定义模块----- define([],callback)

CommonJS

引入模块-------require('模块路径')

定义模块 ------ exports.模块名= function(){ //some code ... }

ES6

引入模块 ----- import

定义模块 ----- export、export default

 

 

使用方式和示例

AMD

步骤如下:
1、引入require.js,并用data-main指定入口的js文件。
2、在入口的js文件内用require.config配制各个模块的路径。
3、define定义js模块文件
4、require引入js模块文件

注意: require([ ],callback)首先异步加载数组内的模块,随后才会去执行callback;

示例:

index.html

<script src="https://cdn.bootcss.com/require.js/2.3.5/require.js" defer async="true" data-main="js/main"></script>

js/main.js (使用require引入模块)

require.config({
  baseUrl: "./",
  paths: {
    "jquery": "jquery.min",
     "math":"math",
    "getStyle":"getStyle"
  }
});
require(['jquery','math','getStyle'], function ($,math,getStyle){
     let total = math.add(109,23);
     console.log(total);
     getStyle.setRedBg('body','#dddddd'); 
     // some code ......
});

js/math.js 自定义的不依赖其它模块的模块 (使用define定义模块)

//不依赖其它模块的,自定义的模块
define(function(){
	var add = function (x,y){
    return x+y;
  };

  return {
    add: add
  };
})

js/getStyle.js 自定义的依赖其它模块的模块 (使用define定义模块)

define(['jquery'],function($){
	var setRedBg = function(tag,color){
		$(tag).css('background',color);
	}
	
	return {
		setRedBg:setRedBg
	}
	
})

2.2 CMD

CMD与AMD的区别:

  • 对于依赖的模块,AMD是提前执行,CMD是延迟执行。
    (不过RequireJS从2.0开始,也改成可以延迟执行)

  • AMD推崇依赖前置,CMD推崇依赖就近。

define(function (requie, exports, module) {
    //依赖可以就近书写
    var a = require('./a');
    a.test();  
    ...
    //软依赖
    if (status) {
        var b = requie('./b');
        b.test();
    }
});

2.3 CommonJs规范

在模块中,通过require()方法来引入外部的模块。
上下文提供了exports 对象导出当前模块的方法和变量, 并且它是唯一导出的出口。
在模块中还存在一个module对象,它代表模块自身,而exports是module的属性。

导出模块

exports.math = function(){
   //some  code ...
}

引入模块

var math = require('math')

2.4 ES6 Module

 ES6 的模块自动开启严格模式,不管你有没有在模块头部加上 use strict;。

 模块中可以导入和导出各种类型的变量,如函数,对象,字符串,数字,布尔值,类等。

 每个模块都有自己的上下文,每一个模块内声明的变量都是局部变量,不会污染全局作用域。

 每一个模块只加载一次(是单例的), 若再去加载同目录下同文件,直接从内存中读取。

/*-----export [test.js]-----*/
let myName = "Tom";
let myAge = 20;
let myfn = function(){
    return "My name is" + myName + "! I'm '" + myAge + "years old."
}
let myClass =  class myClass {
    static a = "yeah!";
}
export { myName, myAge, myfn, myClass }
 
/*-----import [xxx.js]-----*/
import { myName, myAge, myfn, myClass } from "./test.js";
console.log(myfn());// My name is Tom! I'm 20 years old.
console.log(myAge);// 20
console.log(myName);// Tom
console.log(myClass.a );// yeah!

 

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0