模块化:提高复用性,可维护性,可以按需加载
内置模块:node.js官方提供,如fs,path,http
自定义模块:用户创建的.js文件
第三方模块:第三方开发的模块需先下载再使用
加载模块使用require(),加载时会同时执行加载模块的代码
模块作用域:
自定义模块中的变量方法等,只能在当前模块内被访问
好处:防止全局变量污染问题
module对象,向外共享成员
外界使用require导入自定义对象实际上是导入的是 module.exports指向的对象
示例:
module.exports.name='aaa'
module.exports.say=function(){}
module.exports={
name:'sss',
say(){ }
}
exports对象,共享的简写,与module.exports指向同一对象,最终结果以module.exports为准
exports.name='aaa'
exports.say=function(){}
*避免混乱,最好不要混用module.exports和exports
CommonJS:node就是遵循CommonJS规范开发的
npm与包
包就是第三方模块 ,基于内置模块封装出来的,提供更高级方便的API,提高开发效率
包共享平台:检索自己想要的包https://www.npmjs.com/
用npm包管理工具下载包:https://registry.npmjs.org/
npm -v 查看版本号
npm安装包命令
npm install 包的完整名称 可简写==> npm i 包的完整名称
npm i 包的完整名称@版本号:安装指定版本号的包
https://www.npmjs.com/可查api文档
装包后项目文件夹下会多一个node_modules文件夹和package-lock.json的配置文件
node_modules:存放所有已安装到项目的包
package-lock.json:用来记录node_modules目录下每一个包的下载信息(名字\版本号\下载地址)
包管理配置文件
在项目中创建package.json配置文件记录项目中用了哪些包,成员共享时剔除node_modules文件夹(添加到.gitignore忽略文件),共享后通过package.json自行下载用到的包
快速创建package.json文件,项目名称一定要是英文,没有空格
npm init -y
执行后安装包会自动记录到package.json文件
*dependencies节点:开发过程和项目上线都要用到
用来记录npm i安装了哪些包
实际工作中拉取公司剔除node_modules的项目,通过npm i命令一次性安装所有dependencies节点记录的包
卸载包:npm uninstall 会同步修改package.json配置文件的dependencies节点
devDependencies节点:只在开发中用到,项目上线后用不到
记录方式:npm i 包的完整名称 -D
全写: npm install 包的完整名称 --save-dev
解决下包速度慢:
用淘宝npm镜像服务器切换npm下包镜像源
1 查看当前下包镜像源
npm config get registry
2 将下包镜像源切换为淘宝镜像源
npm config set registry=https:
3 检查镜像源是否下载成功
npm config get registry
使用nrm工具
1 全局安装nrm
npm i nrm -g
2 查看所有镜像源
nrm ls
3 将下包镜像源切换为taobao镜像
nrm use taobao
包的分类
1.项目包:安装到node_modules里的包
1.1开发依赖包 devDependencies节点,只开发用到
1.2核心依赖包 dependencies节点,开发项目上线都要用
2.全局包:工具性质的包
npm install 加-g是全局包
3.i5ting_toc:把md文档转化为html页面工具
3.1全局安装
npm install -g i5ting_toc
3.2调用转换 -o是转换完成后自动在浏览器打开html页面
i5ting_toc -f 要转换的md文件路径 -o
规范的包结构

模块的加载机制:
优先从缓存导入,多次调用require()只会加载一次
内置模块加载优先级最高
自定义模块没有./ ../开头的路径标识符node会把他们当内置模块或第三方模块加载