
2.2 Node.js包管理详解
每个语言体系都有一套包管理系统,通过社区集合程序员的共同力量,使语言快速发展。通过各种依赖包,能够简化开发的工作量,加快开发速度。
包管理系统的核心在于模块的使用,即一个Node.js文件就是一个模块,代码如下:

该代码通过require函数,获取了一个已经封装好的http模块。
如果需要导出模块,则需要使用exports关键字导出封装好的模块,供require函数使用。
具体实例如下。
创建一个module.js文件,代码如下:

该文件表示使用exports关键字,导出了setName函数和sayHello函数。
在同一目录下创建getmodule.js文件,代码如下:

该文件表示引用相关的module文件,并调用了引用的相关的两个函数,即setName函数与sayHello函数。
其运行效果为:

其中module.js文件为NPM包管理的基础。NPM包管理包括NPM包管理和yard包管理,下面分别介绍这两种包管理方式的内容。
2.2.1 NPM包管理详解
NPM(Node Package Manager)即“Node包管理器”,它是Node.js默认的、用JavaScript语言编写的软件包管理系统。
本节主要讲解NPM的安装、源设置,以及在项目中NPM的基本使用、NPM和NPM的全局安装与非全局安装。
1.NPM安装
NPM不需要单独安装,在安装Node.js时,NPM会被直接安装上,在安装完成Node.js后,直接输入如下命令,用于测试安装的版本。

如果输出6.14.8,则表示NPM可以基本使用。

至此,就完成了NPM的基本安装。
2.NPM源设置
使用config get registry命令,查看当前的NPM源:

由于国内网络不稳定,会导致NPM下载包时过于缓慢,可以选择切换到国内的镜像源,这里使用npm-config命令:

当不需要使用国内的镜像源时,可以再次切换回来:

3.在项目中使用NPM
1)初始化NPM
若要在项目中使用NPM,则必须先使用NPM完成项目的初始化。
这里新建项目文件夹为test:


进入项目目录:

使用NPM init初始化项目:

输入项目名称为test:

输入项目的版本为1.0.0:

这里的项目描述输入为空即可:

输入项目的启动文件为index.js:

这里输入测试命令为空:

这里输入git资料库为空,表示不跟踪上游的git仓库:

输入项目的关键字为test:

输入作者名称为ming:

输入遵守的开源版权为默认(ISC):

再次确认配置文件后,按回车键:

输入NPM,可以看到项目已经完成初始化:

2)安装相关的NPM包
项目初始化完毕,需要使用某个依赖时,就要提前下载并安装相关的NPM包。
在NPM官网,搜索相关的npm包,如图2-14所示并复制类似如下的命令。
下方的命令表示,在该项目中安装mathjs依赖:


图2-14 NPM网站
安装完成依赖后,在项目的package.json文件中可以看到已安装的依赖。
package. json文件的内容如下:

在该文件中,name为项目名称,version为当前项目的版本,description为项目的描述,main为项目的启动文件,scripts为项目的启动命令。在该文件中,项目只有一个启动命令为test命令。该命令执行后将会输出Error:no test specified并退出命令的执行。author为项目的作者名称,license为项目的版权分发方式,dependencies为项目所安装的依赖,这里安装的依赖只有一个,为8.1.0版本的mathjs依赖。
使用npm i命令安装的依赖都会配置到package.json文件中的dependencies项目。
3)卸载相关的NPM包
已经安装了某个NPM包,如果此时要卸载,则需要使用如下命令:

该命令表示从当前目录中,卸载相关的NPM包,并把相关的依赖从package.json文件中的dependencies项目中删除。
4)使用相关的NPM包
这里使用已安装好的mathjs依赖。
首先在头部文件中引入相关的依赖。

在文件中使用相关依赖对应的函数,这里使用的是mathjs包下的e常量,其代码如下:

输出结果为自然数e:

这样就完成了一个NPM包的基本使用。
4.NPM的全局安装与非全局安装
NPM有全局安装和非全局安装两种方式。但其命令是相同的,参数上也只是多了一个-g,全局安装命令如下:

全局安装的NPM包不会放到当前执行命令的目录下,若要查看全局安装的路径,则需要使用如下命令:

该命令表示查看全局安装的路径。
对于全局安装的NPM包在项目中不能使用require,必须使用链接功能,将全局安装的项目链接到当前目录下,其使用命令如下:

该命令表示把全局安装的express项目链接到当前目录安装下的express。使当前项目仍然可以通过require函数使用全局安装的依赖包。
2.2.2 yarn包管理详解
yarn是Facebook、Google等联合发布的一款全新的JavaScript包管理器。该包管理是新一代的包管理器,其出现是为了弥补一些NPM的缺陷。
yarn的优点如下。
速度快:yarn缓存了每个下载过的包,再次使用时无需重复下载。同时利用并行下载可达到最大化的资源利用率,所以安装时速度会相当快。
可靠:使用详细、简洁的文件格式和明确的安装算法,yarn能够确保在不同的系统上无差异的工作。
更加简洁的输出:NPM的输出信息较长,在执行npm install<package>时,命令行里会不断地打印出所有被安装的依赖。相比之下,yarn要简洁太多,默认情况下,它结合emoji直观地打印出必要的信息,不管被不同的库间接关联引用多少次,安装这个包时都只会从一个注册源去安装,要么是NPM,要么是Bower,以防止出现混乱不一致的情况。
更好的语义化:yarn改变了NPM的一些命令名称,如yarn add/remove总体体验上会比NPM原本的install/uninstall更加清晰。
下面主要讲解yarn的安装与构建项目。
◎安装yarn
yarn和NPM相比需要单独安装。在yarn的官网(https://yarnpkg.com/)选择Windows系统的稳定版本,下载相关的msi安装包,如图2-15所示。

图2-15 yarn官网界面
下载好msi安装包,并按提示完成相应的安装步骤,其安装界面如图2-16所示。

图2-16 yarn的安装界面
打开PowerShell进入命令行界面,输入如下命令:

该命令表示查看当前的yarn版本,如果输出:

则表示当前的yarn已经安装成功。
◎使用yarn构建项目
这里使用yarn构建vue项目,使用NPM安装vue的脚手架:

该命令表示全局安装vue脚手架vue-cli项目,以供全局使用。
使用Webpack打包工具创建vue项目。

该命令表示使用Webpack创建名称为my-project的项目。
创建项目完成后,进入项目创建目录。

使用yarn安装相关的依赖包。

该命令表示使用yarn启动Webpack打包工具的vue项目。
此时,如果浏览器出现如图2-17所示的界面,则表示项目搭建基本完成。

图2-17 yarn的基本使用