Node.js 中的模块
- 模块分类 Node.js中的模块化可以分为三类
- 内置模块——由Node.js官方提供,例如fs、path、http等
- 自定义模块——由用户创建的每个.js文件,都是自定义模块
- 第三方模块——由第三方开发出来的模块,使用前需要提前下载
- 模块加载
使用
require()方法可以加载模块。并且在模块被加载的时候,模块中的代码会被执行一次。
const fs = require('fs'); // 加载内置模块,给出模块名
const mine = require('./mine.js'); // 加载自定义模块,给出模块的路径(可省略.js后缀)
const moment = require('moment'); // 加载第三方模块,给出模块名
- 共享模块中的成员 由于模块作用域的存在,模块内部定义的变量和方法在模块外部并不能随意使用。
在每一个.js自定义模块中,都有一个module对象,它里面存储了和当前模块有关的信息,例如这个模块的存放路径、模块名以及exports对象。
在自定义模块中,我们可以使用module.exports对象将模块内的成员共享出去,供外界使用。当我们使用require()方法加载模块时,得到的其实就是module.exports这个对象。
为了少写几个字母,自定义模块中其实不止有module.exports对象,还有exports对象,它们指向的是同一个对象,作用和使用方法也都相同,就是为了使用起来简单。但是如果这两个对象起冲突的时候,还是以module.exports对象为准。
CommonJS
CommonJS是一种模块化规范。
Node.js遵循的就是CommonJS模块化规范,它规定了模块的特性和各模块之间是如何相互依赖的。
CommonJS规定:
- 每个模块内部,
module变量代表当前模块。 module变量是一个对象,它的exports属性(即module.exports)是对外接口。- 加载某个模块,其实就是加载该模块的
module.exports属性。require()方法用于加载模块。
NPM
-
包 上述所说的第三方模块,也就是包。
-
NPM 使用npm首次装包完成后,在项目文件夹下会多出两个文件
- node_modules文件夹——用来存放所有已安装到项目中的包。
require()导入第三方包时,就是从这个文件夹中查找并加载包。 - package-lock.json配置文件——用来记录node_modules文件夹下每一个包的下载信息。例如包的名字、版本号、下载地址等。
- 包管理配置文件
npm规定在项目根目录中,必须提供一个叫做package.json的包管理配置文件。
该配置文件用来记录与项目有关的一些配置信息。例如:
- 项目的名称、版本号、描述等(下图中红框所示是关于本项目的描述)
- 项目中都用到了哪些包(下图中蓝框所示,即dependencies属性)
- 哪些包只会在开发期间用到
- 哪些包在开发和部署时都要用到
- NPM常用命令
-
创建包管理配置文件——
npm init -y创建一个package.json文件,之后所有用npm install安装的包都会自动被记录到package.json文件中(记录包的名称和版本号)。 -
安装项目所有的依赖包——
npm install/npm i -
安装指定的包——
npm install xxx/npm i xxx默认情况下会被记录到dependencies结点中,代表这个包会在开发时和项目上线后都会使用 -
卸载指定的包——
npm uninstall xxx -
安装仅开发时依赖的包——
npm i xxx -D/npm i xxx --save-dev这个包会被记录在devDependencies结点中,代表这个包仅在开发过程中会被用到 -
安装全局包——
npm i xxx -g -
卸载全局包——
npm install xxx -g
- 淘宝NPM镜像 由于在使用npm下包的时候,默认是从国外的服务器上下载,所以下载速度会很慢。因此我们使用淘宝在国内搭建的NPM镜像服务器,从而提高了下载速度。
镜像:是一种文件存储形式,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本,即为镜像。镜像网站就是副本网站。
使用npm config get registry可以查看当前npm下包的服务器是什么
使用npm config set registry=https://registry.npm.taobao.org/就可以把下包的服务器改为淘宝镜像
- NRM
为了方便切换下包的镜像源,可以使用
npm i nrm -g下载一个小工具——nrm
然后可以通过nrm ls查看目前所有可用的镜像源
之后再使用nrm use taobao就可以切换到淘宝镜像上
- 包的分类
- 项目包
存放在
node_module里的包都是项目包,项目包又可以分为开发依赖包和核心依赖包。 - 全局包
全局包被安装到了
C:\Users\Citizen7\AppData\Roaming\npm\node_modules里。
- 项目包
存放在
发布 NPM 包
- 创建一个文件夹,里面放好三个文件
- 手动初始化配置文件
-
编写这个包的主要内容 略。
-
编写包的说明文档 把包的作用、用法、注意事项等写在README.md中即可。
-
发布npm包
- 注册npm账号
- 在终端输入
npm login命令,依次输入用户名、密码、邮箱后即可登陆成功(注意在这一步之前要把npm镜像源从淘宝镜像切回到官网) - 将终端切到包的根目录之后,运行
npm publish命令,将包发布到npm服务器上 - 运行
npm unpublish xxx --force命令,可以删除72小时内发布的包(72小时后这个包将永远不能被删除)