moonshot 7 - Node.js 2

145 阅读5分钟

Node.js 中的模块

  • 模块分类 Node.js中的模块化可以分为三类
  1. 内置模块——由Node.js官方提供,例如fs、path、http等
  2. 自定义模块——由用户创建的每个.js文件,都是自定义模块
  3. 第三方模块——由第三方开发出来的模块,使用前需要提前下载
  • 模块加载 使用require()方法可以加载模块。并且在模块被加载的时候,模块中的代码会被执行一次。
const fs = require('fs'); // 加载内置模块,给出模块名
const mine = require('./mine.js'); // 加载自定义模块,给出模块的路径(可省略.js后缀)
const moment = require('moment'); // 加载第三方模块,给出模块名
  • 共享模块中的成员 由于模块作用域的存在,模块内部定义的变量和方法在模块外部并不能随意使用。

在每一个.js自定义模块中,都有一个module对象,它里面存储了和当前模块有关的信息,例如这个模块的存放路径、模块名以及exports对象

image.png

在自定义模块中,我们可以使用module.exports对象将模块内的成员共享出去,供外界使用。当我们使用require()方法加载模块时,得到的其实就是module.exports这个对象。

为了少写几个字母,自定义模块中其实不止有module.exports对象,还有exports对象,它们指向的是同一个对象,作用和使用方法也都相同,就是为了使用起来简单。但是如果这两个对象起冲突的时候,还是以module.exports对象为准。

CommonJS

CommonJS是一种模块化规范。

Node.js遵循的就是CommonJS模块化规范,它规定了模块的特性和各模块之间是如何相互依赖的。

CommonJS规定:

  1. 每个模块内部,module变量代表当前模块。
  2. module变量是一个对象,它的exports属性(即module.exports)是对外接口。
  3. 加载某个模块,其实就是加载该模块的module.exports属性。require()方法用于加载模块。

NPM

  • 上述所说的第三方模块,也就是包。

  • NPM 使用npm首次装包完成后,在项目文件夹下会多出两个文件

  1. node_modules文件夹——用来存放所有已安装到项目中的包。require()导入第三方包时,就是从这个文件夹中查找并加载包。
  2. package-lock.json配置文件——用来记录node_modules文件夹下每一个包的下载信息。例如包的名字、版本号、下载地址等。
  • 包管理配置文件

npm规定在项目根目录中,必须提供一个叫做package.json的包管理配置文件。

该配置文件用来记录与项目有关的一些配置信息。例如:

  1. 项目的名称、版本号、描述等(下图中红框所示是关于本项目的描述)
  2. 项目中都用到了哪些包(下图中蓝框所示,即dependencies属性)
  3. 哪些包只会在开发期间用到
  4. 哪些包在开发和部署时都要用到

image.png

  • NPM常用命令
  1. 创建包管理配置文件——npm init -y 创建一个package.json文件,之后所有用npm install安装的包都会自动被记录到package.json文件中(记录包的名称和版本号)。

  2. 安装项目所有的依赖包——npm install / npm i

  3. 安装指定的包——npm install xxx / npm i xxx 默认情况下会被记录到dependencies结点中,代表这个包会在开发时和项目上线后都会使用

  4. 卸载指定的包——npm uninstall xxx

  5. 安装仅开发时依赖的包——npm i xxx -D / npm i xxx --save-dev 这个包会被记录在devDependencies结点中,代表这个包仅在开发过程中会被用到

  6. 安装全局包——npm i xxx -g

  7. 卸载全局包——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查看目前所有可用的镜像源

image.png

之后再使用nrm use taobao就可以切换到淘宝镜像上

  • 包的分类
    • 项目包 存放在node_module里的包都是项目包,项目包又可以分为开发依赖包核心依赖包
    • 全局包 全局包被安装到了C:\Users\Citizen7\AppData\Roaming\npm\node_modules里。

发布 NPM 包

  • 创建一个文件夹,里面放好三个文件

image.png

  • 手动初始化配置文件

image.png

  • 编写这个包的主要内容 略。

  • 编写包的说明文档 把包的作用、用法、注意事项等写在README.md中即可。

  • 发布npm包

  1. 注册npm账号
  2. 在终端输入npm login命令,依次输入用户名、密码、邮箱后即可登陆成功(注意在这一步之前要把npm镜像源从淘宝镜像切回到官网)
  3. 将终端切到包的根目录之后,运行npm publish命令,将包发布到npm服务器上
  4. 运行npm unpublish xxx --force命令,可以删除72小时内发布的包(72小时后这个包将永远不能被删除)