Javascript模块化

一、JS规范缺陷

1.没有模块系统;
2.标准库较少;
3.没有标准接口;
4.缺乏包管理系统。

二、CommonJS的模块规范

1.模块引用:require()方法

var math=require('math');  //require方法引入一个模块的API到当前上下文中。

2.模块定义:exports对象、module对象
(1)exports对象:用于导出当前模块的方法或者自变量,并且它是唯一导出的出口。
(2)module对象:代表模块自身。在Node中,一个文件就是一个模块,将方法挂载在exports对象上作为属性即可定义导出的方式。

//math.js
exports.add=function(){
	var sum=0, i=0, args=arguments, l=args.length;
	while(i<1){
		usm+=args[i++];
	}
	return sum;
};
//index.js
var math=require('math');
exports.increment=function(val){
	return math.add(val,+);
}

3.模块标识:即传递给require方法的参数,必须是符合小驼峰命名的字符串,或者以.、…开头的相对路径,或者绝对路径。它可以没有文件名后缀.js。

三、CommonJS的模块实现

(1)模块的分类:

  • 核心模块:在Node源代码的编译过程中,编译进了二进制执行文件。在Node进程启动时,部分核心模块就被直接加载进内存中,省略掉了文件定位和编译执行这两个步骤。所以它的加载速度最快。
  • 文件模块:在运行时动态加载,需要完整的路径分析、文件定位、编译执行过程,速度比核心模块慢。文件模块通常调用核心模块、由第三方编写。

(2)过程:路径分析->文件定位->编译执行

四、AMD(异步模块定义)

模块定义

define(id?,dependencies?,factory);
//id和依赖dependencies是可选的,factory的内容就是实际代码的内容。

例如,

define(function(){
	var exports={};
	exports.sayHello=function(){
		alert('Hello from module:'+module.id);
	};
	return exports;//内容通过返回的方式实现导出
});

五、CMD规范

与AMD规范的主要区别在于定义模块和依赖引入的部分。AMD需要在声明模块的时候指定所有的依赖,通过形参传递依赖到模块内容中。
例如,

define(['dep1','dep2'],function(dep1,dep2){
	return function(){};
});

在依赖部分,CMD支持动态引入

define(function(require,exports,module){
	//模块代码内容
});

六、包与NPM

1.概念:将模块联系起来的一种机制。

2.CommonJS的包规范的定义:
(1)包结构
包应该包含如下这些文件:package.json、bin、lib、doc、test
(2)包描述文件
用于表达非代码相关的信息,是一个JSON格式的文件——package.json

3.NPM常用功能
(1)查看帮助

$ npm -v   //查看当前npm版本
$ npm  //查看帮助引导说明

(2)安装依赖包

$ npm install express -g   //全局安装express模块
$ npm install <folder>   //从本地安装,尖括号内的目录为package.json文件所在位置
$ npm install underscore --registry=http://registry.url //从镜像源安装

(3)NPM钩子命令
package.json中scripts字段就是让包在安装或者卸载等过程中提供钩子机制。
示例,

"scripts":{
	"preinstall":"preinstall.js",
	"install":"install.js",
	"uninstall":"uninstall.js",
	"test":"test.js"
}

在以上字段中执行npm install package时,preinstall指向的脚本将会被加载执行,然后install指向的脚本会被执行。
在执行npm uninstall package时,uninstall指向的脚本也许会做一些清理工作。
当在一个具体的包目录下执行npm test时,将会运行test指向的脚本。
(4)发布包
编写模块->初始化包描述文件npm init->注册仓库账号->上传包npm publish folder->安装包->管理包权限
(5)分析包
可以为你分析出当前路径下能够通过模块路径找到的所有包,并生成依赖树。

$ npm ls

4.NPM潜在问题:采纳模块时要考虑包质量和安全问题。

——阅读《深入浅出node.js》第二章

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值