AMD、CMD、common

本文深入探讨了AMD、CMD及Common.js三种模块化工具的定义、导出与引用流程,对比了它们在前端开发中的应用特点,并详细讲解了自定义模块的创建、导出与发布至npmjs.com的全过程。

AMD、CMD、common.js

三者都是都是模块化工具,可以将一个特定功能封装起来,便于随时调用,实现代码量减少,避免全局污染等功能,对于前段开发很方便。

模块化也叫做***具有特定功能的对象***,所以这样就更好的方便我们理解模块化,就像封装函数一样,讲某个功能的函数封装起来,便于多次调用,而模块化也是如此,在开发中需要某个功能,直接引入该模块即可,

模块定义的流程

定义模块(即需要实现什么功能就怎么定义)

导出模块

引用模块

定义模块

AMD定义模块:define

define({
	a:1,
	b:2,
	add:function(){}
})

CMD定义模块:define

define(function(require,exports,module){

})

common.js的三种模块

  1. 内置模块

    挂载在node.js全局对象身上的api

    内置模块可以直接使用

  2. 第三方模块

    别人封装好的模块

    这些模块具有一些特定的功能

    存放在www.npmjs.com中

    使用第三方模块
    1、使用npm/cnpm安装模块
    2、在文件中引入模块
    3、在www.npmjs.com网站中找到使用方法
    

3.自定义模块

​ 创建模块

例:const student = {
	name:'zhangsan',
	age:20
}

​ 导出模块

module.exports = {student}

使用花括号{}导出模块的好处

​ 1、可以批量导出模块,按需引用

​ 引用模块

const {student} = require('./student.js')

上传自定义模块至npmjs.com网站

1、在文件夹下打开终端,输入npm init -y,创建package.json文件;

2、确定电脑源是否为npm,在当前终端输入nrm ls,检查源,不是npm则切换至npm,命令为nrm use npm;

3、输入npm addduser,回车,依次输入username,password,email,登录npmjs网站;

4、显示登录成功,输入npm publish,将文件上传至npmjs网站

可能出现的问题

1、包名称冲突,换个文件名试试

2、邮箱没有激活 ( 最多的 )

3、npm源没有切换

4、整个电脑的npm就不能使用

AMD 即 Asynchronous Module Definition,中文名是异步模块定义,旨在解决依赖、异步加载的问题。其语法方面,定义使用 `define(id, dependencies, factory)`,其中 `id` 是可选参数,用于定义模块的标识,若无则默认是脚本的文件名(去掉扩展名);`dependencies` 是当前模块依赖的其他模块名称数组;`factory` 是工厂方法,为模块初始化的函数或者对象。加载使用 `require([dependencies], function(){})`,`dependencies` 为依赖的模块数组,`function` 是回调函数,当模块加载成功后,在函数中调用这些模块。AMD 推崇依赖前置,默认将多个 API 当作一个使用,依赖模块通过 `dependencies` 引入,必须在 `factory` 函数执行之前先执行。例如: ```javascript // 定义模块 define(['./a', './b'], function (a, b) { a.test(); b.test(); }); // 加载模块 require(['module1', 'module2'], function (module1, module2) { // 使用模块 }); ``` CMDCommon Module Definition,是通用模块定义,是国内发展出来的规范,有浏览器的实现 SeaJS。其语法方面,定义使用 `define(id?, deps?, factory)`,Sea.js 推崇一个模块一个文件,遵循统一的写法,常以文件名作为模块 `id`,且推崇依赖就近,一般不在 `define` 的参数中写依赖,而是在 `factory` 中书写。`require` 是一个方法,接受模块标识作为唯一参数,用来获取其他模块提供的接口;`exports` 是一个对象,用来向外提供模块接口;`module` 是一个对象,用来批量输出模块的属性和方法。加载使用 `seajs.use(['1.js', '2.js', ...], function(mod1, mod2, ...){})`。CMD 中没有全局 `require`,而是提供 `seajs.use` 来实现模块系统的加载启动,每个 API 简单纯粹。在 `factory` 执行时才通过 `require` 加载依赖的模块,推崇延迟执行和依赖就近。例如: ```javascript define(function (require, exports, module) { var a = require('./a'); a.test(); // 软依赖 if (status) { var b = require('./b'); b.test(); } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值