node中的模块
javaScript 从一个仅仅在浏览器上面的一个玩具语言,一转眼演变成无所不能神一般的存在。但是,由于天生存在着一点戏剧性,模块系统作为一门语言最基本的属性却是javaScript所缺的。 
1. JS的不足
js没有模块系统,不支持封闭作用域或依赖管理 没有标准库,没有文件系统API 没有包管理系统,不能自动加载和安装依赖
2.commonjs规范
一个 node.js由大量模块组成,每个JS文件都是一个模块 实现了require方法,npm基于commonjs实现了自动加载和安装依赖
3.模块化优点
- 增加内聚性,有助分工协作
- 方便重构
- 提高代码质量
3.模块使用
定义模块
导出模块 module.exports和exports
使用模块 require(‘filename’);
实现原理
(function(exports,require,module,__filename,__dirname){ return module.exports; })();
module.exports和exports的区别
4.require的应用
加载模块后会缓存,多次加载后得到同一对象
require('./test.js')查看模块缓存
console.log(require.cache);查询模块绝对路径
require.resolve('./test.js');查看单个的模块缓存
require.cache[require.resolve('./test.js')]删除模块缓存
delete require.cache[require.resolve('./test.js')];
5.包和npm
- 多个模块可以封装成一个包
- npm是node.js默认的模块管理器,用来安装和管理node模块 网址为 http://npmjs.org
- 可以用包的方式通过npm安装、卸载、发布包
6.组织和管理模块
放置多个模块的文件夹称为包,可以通过包来对一组具有相互依赖的有关系模块进行管理。
初始化一个项目
npm init -y{ "name":"包的名称", "description":"包的简要说明。", "version":"版本号", "keywords":"关键字", "licenses":"许可证", "repositories":"仓库地址 ", "dependencies":"包的依赖,一个关联数组,由包名称和版本组成。" }
7.安装第三方包
全局安装 直接下载到Node的安装目录中,各个项目都可以调用,适合工具模块,比如webpack
npm install -global [package name]本地安装 将一个模块下载到当前目录的node_modules子目录,然后只有在当前目录和它的子目录之中,才能调用这个模块
npm install [package name] --save-dev/--save查看全局路径
npm root -g
8.卸载第三方包
卸载全局
npm uninstall -g [package name]卸载本地
npm uninstall [package name] --save-dev
9.发布全局项目
创建并进入目录
mkdir jiang && cd jiang初始化项目
npm init jiang注册用户
npm adduser发布项目
npm publish
10.源管理工具
安装此工具
npm install -g nrm显示所有的源
nrm ls切换到中国源
nrm use cnpm
注意项目的名称不能是别人已经注册的名称,尽量用自己的名字做前缀 如果注册失败的话可能是因为改了镜像地址了,需要改回来 npm config set registry “http://registry.npmjs.org/“ 查看所有的配置项 npm config ls
11.模块分类
内置模块
util
require('./person'); inherits继承 inspect解析属性 isArray isRegExp isDate isError判断类型文件模块
自定义模块
require('./person');第三方模块
mime模块
require('mime');
12.模块查找规则
当没有以’/‘或者’./‘来指向一个文件时,这个模块要么是核心模块,要么就是从node_modules文件夹加载的 第三方模块
- 从module.paths取出第一个目录开始。
- 直接从目录中查找,存在结束,不存在下一条。
- 尝试添加.js、.json查找
- 尝试将require的参数作为一个包来查找,读取package.json,取得main配置项指定的文件查找,不存在进行3
- 继续失败查看下一个目录