模块化
模块的分类
node中的模块分为三种
- 内置模块
- 自定义模块
- 第三方模块
内置模块主要有
- path路径模块
- http网络模块
- fs文件模块
- os操作系统模块
这些模块内封装了一些属性和函数,用到的时候可以查一下
node基础教程
模块加载机制
整体机制
JS的模块在导入时会执行模块内的代码
- 加载内置模块和第三方模块只需要写模块名字
- 加载自定义模块要写路径(可以不写后缀名)
- 模块优先从缓存中加载
- 内置模块加载优先级最高
自定义模块查找顺序
自定义模块必须以./ 或者 …/开头
自定义模块如果省略的文件的扩展名,则会按照下面的顺序来查找
- 无扩展名
- 补全js
- 补全json
- 补全node
- 报错
第三方模块加载机制
会先在文件所在的目录查找
如果找不到就去上一级目录中查找
直到找到或者查找到磁盘的根目录依然找不到报错
将目录作为模块
-
查找这个目录下的package.json中记录的入口
-
如果main记录的入口不存在则会记载index.js
-
如果依然失败则报错
CommonJS
作用域
在node中会默认使用模块化
模块作用域的变量和函数只能在当前模块中使用
规范
- 每个模块内有一个module对象代表当前模块
- module对象上有一个exports属性,导入的永远是这个属性的内容
- 使用require方法来加载模块
exports对象
-
module中有一个exports属性,这个属性中的内容会被暴露出去,require导入的就是exports暴露的内容
-
为了方便导出,node也提供了exports对象,默认和module的exports属性指向相同。
-
但如果直接给exports属性赋值,则会修改exports对象的指向,导致对象失效,无法正常导出。
npm
什么是npm
npm 是node的一个包管理工具,内置了许多指令来管理包。
- npm i <包名> 可以安装包,在安装时可以使用@来指定版本
- npm -v 查看npm的版本
- npm init -y 用来初始化项目,创建package.json
- npm i 可以安装package.json中的所有依赖包
- npm uninstall 可以卸载掉已经安装的包
下载的包存放咋node_modules文件夹下
package_lock.json 记录了安装的包的信息,不要修改这个文件的信息。
nrm
nrm是npm的一个小工具,可以安装nrm开获取更多指令
npm i nrm -g
这个工具可以获得快速查看和切换下包的源
- 查看所有的源:nrm ls
- 切换为淘宝镜像:nrm use taobao
包管理文件
一般项目中都会有一个package.json的文件,用来记录项目中需要用到哪些包。
包的规范
-
包必须以单独的目录存在
-
包的根目录必须包含package.json文件
-
package.json中必须包含
name
,version
,main
字段
包的分类
- 全卷包
在安装时提供 -g 参数的包会被变为全局包
这些包被安装在c盘的默认路径中
一般只有可以提供指令的工具类包才会全局安装 - 项目包
安装在项目的node_modules中的包
在安装项目包时加上-D
会被视为开发时依赖,被记录在package.json的Devdependencies
属性下
其余的包会被视作运行时依赖,被记录在dependencies
属性下