# js 模块化编程发展的过程
- 模块化开发的优点:
- 开发效率高
- 代码方便重用,别人开发的模块直接拿过来就可以使用,不需要重复开发类似的功能
- 可维护性高
- 软件的生命周期中最长的阶段其实不是开发阶段,而是维护阶段,需求变更比较频繁,使用模块化开发方式更容易维护
# 一、演变历程
- 当我们还在用 jq 写代码的时候,为了写一个模块通常是小组成员之间约定需要复用某一个功能,需要
# 1.全局函数
funciton dateForm(date){
...
return date
}
1
2
3
4
2
3
4
# 2.对象封装-命令空间
var utils={}
utils.add=function(a,b){
return a+b
}
1
2
3
4
2
3
4
# 3.公有私有成员分离
# 4.增强可维护可扩展性
# 5.添加第三方依赖
# 二、规范化标准
# 1.CMD (sea.js)
# 2.AMD(requireJS)
# commonJS
前言
模块化的目的是解决大型项目中多人协作的问题
# 1.js 模块化的不足
- JS 没有模块系统,不支持封闭的作用域和依赖管理
- 没有标准库,没有文件系统和 io 流 api
- 没有包管理系统
# 2.CommonJS 规范
- 封装功能
- 封装作用域
- 可能解决依赖问题
- 工作效率更高,重构方便
# 3.Node 中的 CommonJS
- 在 node.js 里,模块划分所有的功能,每个 JS 都是一个模块
- 实现 require 方法,npm 实现了模块的自动加载和安装依赖
;(function (exports, require, module, __filename, __dirname) {
exports = module.exports = {}
exports.name = "zfpx"
exports = { name: "zfpx" }
return module.exports
})
1
2
3
4
5
6
2
3
4
5
6
# 4.模块分类
# 4.1 原生模块
http、path、fs、util、events编译成二进制,加载速度最快,原来模块通过名称加载
# 4.2 文件模块
在硬盘的某个位置,加载速度非常慢,文件模块通过名称或路径来加载文件模块的后缀有三种
- 后缀名为.js 的 JavaScript 脚本文件,需要先读入内存再运行
- 后缀名为.json 的 JSON 文件,fs 读入内存转化为 JSON 对象
- 后缀名为.node 的经过编译后的二进制 C/C++扩展模块文件,可以直接使用
提示
一般自己写的通过路径来加载,别人写的通过名称去当前目录或全局 node_modules 下面去找
# 4.3 第三方模块
- 如果 require 函数只指定名称则视为 node_modules 下面加载文件,这样的话可以移动模块而不需要修改引用的模块路径
- 第三方模块查询包括 module.paths 和全局目录
# 4.3.1 . 全局目录
window 如果在环境变量中设置了 NODE_PATH 变量,并将变量设置为一个有效的磁盘目录,require 在本地找不到此模块时向在此目录下找这个模块。 UNIX 操作系统中会从 $HOME/.node_modules $HOME/.node_libraries 目录下寻找
# 4.4 模块的加载策略
# 4.5 文件模块查找规则
# 5.外部访问内部
- 使用 exports 对象
- 使用 module.exports 导出引用类型
# 6.模块对象属性
- module.id
- module.filename
- module.loaded
- module.parent
- module.children
- module.paths
# 7.包
在 Node.js 中,可以通过包来对一组具有相互依赖关系的模块进行统一管理,通过包可以把某个独立功能封装起来,每个项目的根目录下面,一般都有一个 package.json 文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install 命令根据这个配置文件,自动下载所需的模块,也就是项目所需的运行和开发环境。
| 项目 | 描述 |
|---|---|
| name | 项目名称 |
| version | 版本号 |
| description | 项目描述 |
| keywords: {Array} | 关键词,便于用户搜索到我们的项目 |
| homepage | 项目 url 主页 |
| bugs | 项目问题反馈的 Url 或 email 配置 |
| license | 项目许可证 |
| author,contributors | 作者和贡献者 |
| main | 主文件 |
| bin | 项目用到的可执行文件配置 |
| repository | 项目代码存放地方 |
| scripts | 声明一系列 npm 脚本指令 |
| dependencies | 项目在生产环境中依赖的包 |
| devDependencies | 项目在生产环境中依赖的包 |
| peerDependencies | 应用运行依赖的宿主包 |
package.json
# 8.npm
- 安装完 node 之后只能使用 node 语言特性及核心函数,我们还需要一个系统下载、安装和管理第三方模块
- 在 node 里这个系统被称为 node 包管理器(Node Package Manager,NPM)
# 8.1 npm 提供给的功能
- 公共注册服务,用户可以把自己写的包上传到服务器上
- 命令行下载工具,用户可以通过 npm 命令吧别人写的包下载到自己电脑上,还可以管理自己模块依赖的其他模块
搜索第三方包的地址
https://www.npmjs.com/search
1
# 9.yarn
二 →