Node.js第三方模块

【图书介绍】《Node.js+MongoDB+Vue.js全栈开发实战》-CSDN博客

《Node.js+MongoDB+Vue.js全栈开发实战(Web前端技术丛书)》(邹琼俊)【摘要 书评 试读】- 京东图书 (jd.com)

2.3.1 什么是第三方模块

别人写好的、具有特定功能的、我们能直接使用的模块即为第三方模块。由于第三方模块通常由多个文件组成并被放置在一个目录中,因此又叫包。

第三方模块有两种存在形式:

  1. 以.js文件的形式存在,提供实现项目具体功能的API接口。
  2. 以命令行工具形式存在,辅助项目开发。

2.3.2 获取第三方模块

我们可以从https://www.npmjs.com/中获取第三方模块,它是第三方模块的存储和分发仓库。

获取第三方模块主要有npm(node package manager)和yarn两种方式,接下来分别对这两种方式进行讲解。

1. npm

当我们安装Node.js的时候,会自动安装npm工具,它是Node.js的第三方模块管理工具。

由于npm安装插件默认是从国外服务器下载,这可能会受到网络环境的影响,导致下载速度慢并且有时可能会出现连接异常。很多开发者希望能有一个在中国境内的npm服务器以提升安装速度。为了满足这一需求,乐于分享的淘宝团队(属于阿里巴巴旗下的阿里云业务)创建了一个完整的npm镜像。根据官方网站的说法:"这是一个完整npmjs.org镜像,你可以用此代替官方版本(只读),同步频率目前为10分钟一次,以保证尽量与官方服务同步。"这意味着开发者可以使用阿里云在中国境内部署的服务器来安装Node.js包,从而获得更快的下载速度和更稳定的服务体验。

1)使用淘宝镜像

(1)使用阿里定制的cnpm命令行工具代替默认的npm,输入下面代码进行安装:

复制代码
npm install -g cnpm --registry=https://registry.npm.taobao.org

(2)检测cnpm版本:

复制代码
cnpm -v

如果安装成功可以看到cnpm的基本信息。

(3)将淘宝镜像设置成全局的下载镜像:

直接在命令行设置

复制代码
npm config set registry https://registry.npm.taobao.org

配置后可以通过下面方式来验证是否成功:

复制代码
npm config get registry

如果看到运行结果是:

复制代码
C:\Users\zouqi>npm config get registry

https://registry.npm.taobao.org/

说明我们已经将npm的镜像改为了淘宝镜像。

使用npm下载和卸载模块的命令如下:

  1. 下载:npm install模块名称。
  2. 卸载:npm unintall package模块名称。

该命令在哪里执行就会把包下载到哪里,默认会下载到node_modules目录中。node_modules会自动生成,我们不要改这个目录,当然也不支持改。

2)全局安装与本地安装

在使用npm进行包管理时,添加-g参数表示全局安装,这通常用于那些提供命令行工具的包。而如果没有添加-g参数,则默认进行本地安装,这适用于作为项目依赖的库文件。

npm install和npm i命令是等价的,它们都可以用来安装包。

在npm版本5.0.0之后,--save参数已经不是必需的,因为默认行为已变为将依赖信息添加到 package.json文件的dependencies部分。这些依赖被视为生产阶段的依赖,意味着它们是项目运行时所必需的,即使在程序上线后也是如此。

--save-dev或-D参数用来将包信息添加到devDependencies部分。这些依赖是在开发阶段需要的,例如测试框架或构建工具,它们不会在生产环境中被安装或使用。

2. yarn

yarn是由Facebook、Google、Exponent和Tilde联合推出的一个新的JS包管理工具,它具有如下特点:

(1)超级快。yarn缓存了每个下载过的包,所以再次使用时无须重复下载;同时利用并行下载以最大化资源利用率,因此安装速度更快。

(2)超级安全。在执行代码之前,yarn会通过算法校验每个安装包的完整性。

(3)超级可靠。使用详细、简洁的锁文件格式和明确的安装算法,yarn能够保证在不同系统上无差异地工作。

Yarn的安装示例如下:

yarn安装

复制代码
npm install -g yarn

查看yarn版本

复制代码
yarn --version 或者yarn --v

yarn设置淘宝镜像

复制代码
yarn config set registry https://registry.npm.taobao.org --g

yarn换成原来的镜像

复制代码
yarn config set registry http://registry.npmjs.org/

yarn常用命令如下:

(1)初始化项目:

复制代码
yarn init // 同npm init,执行输入信息后,会生成package.json文件

(2)安装包:

复制代码
yarn install //安 装package.json里的所有包,并将包及其所有依赖项保存进yarn.lock

yarn add [package] // 在当前的项目中添加一个依赖包,会自动更新到package.json和yarn.lock文件中

// 不指定依赖类型时默认安装到dependencies里,当然也可以指定依赖类型

yarn add --dev/-D // 安装到 devDependencies

(3)运行脚本:

复制代码
yarn run脚本名称

例如yarn run dev,用来执行在package.json中scripts属性下定义的脚本。

3. npm和yarn的区别

1)npm

用过npm的都知道,npm装包非常慢,即使使用了镜像也还是很慢。当我们删除node_modules再重新安装的时候更是慢得难以接受。有时同一个项目在安装的时候也无法保持一致性。

npm5.0之后做了一些改进。

  1. 新增了类似yarn.lock的package-lock.json。
  2. git依赖支持优化:这个特性在需要安装大量内部项目(例如没有自建源的内网开发)或需要使用某些依赖的未发布版本时很有用。在npm5之前可能需要使用指定commit_id的方式来控制版本。
  3. 文件依赖优化:在之前的版本,如果将本地目录作为依赖来安装,将会把文件目录作为副本复制到node_modules中,而在npm5中,将改为使用创建symlinks的方式来实现(使用本地tarball包除外),不再执行文件拷贝,这将会提升安装速度。目前yarn还不支持该功能。

通过以上一系列改进,npm5在速度和使用上确实有了很大提升,值得尝试,不过它还是没有超过yarn。

2)yarn

yarn的优点如下:

  1. 速度快。
  2. 并行安装:无论npm还是yarn在执行包的安装时,都会执行一系列任务。npm是按照队列执行每个package,也就是说必须等到当前package安装完成之后,才能继续后面的安装。而yarn是同步执行所有任务,因而提高了性能。
  3. 离线模式:如果之前已经安装过一个软件包,用yarn再次安装时可以直接从缓存中获取,而不用像npm那样再次从网络下载。
  4. 安装版本统一:为了防止拉取到不同的版本,yarn提供了一个锁定文件(lock file),用来记录被确切安装上的模块的版本号。每次只要新增了一个模块,yarn就会创建(或更新)yarn.lock这个文件。这么做就保证了每一次拉取同一个项目依赖时,使用的都是一样的模块版本。npm其实也有办法实现处处使用相同版本的packages,但需要开发者执行npm shrinkwrap命令。这个命令将会生成一个锁定文件,在执行npm install的时候,该锁定文件会先被读取,这和yarn读取yarn.lock文件的原理相同。npm和yarn两者的不同之处在于,yarn默认会生成这样的锁定文件,而npm要通过shrinkwrap命令生成npm-shrinkwrap.json文件,只有当这个文件存在的时候,packages版本信息才会被记录和更新。
  5. 更简洁的输出:npm的输出信息比较冗长。在执行npm install<package>的时候,命令行里会不断地打印出所有被安装上的依赖。相比之下,yarn简洁太多:默认情况下,yarn结合emoji直观且直接地打印出必要的信息,此外也提供了一些命令供开发者查询额外的安装信息。
  6. 多注册来源处理:所有的依赖包,不管它被不同的库间接关联引用多少次,在安装这个包时,都只会从一个注册来源去安装,要么是npm要么是bower,防止出现混乱不一致。
  7. 更好的语义化:yarn改变了一些npm命令的名称,比如yarn add/remove,感觉上比npm原本的install/uninstall要更清晰。yarn和npm命令的对比如表2-1所示。
相关推荐
在下千玦4 小时前
#管理Node.js的多个版本
node.js
你的人类朋友5 小时前
MQTT协议是用来做什么的?此协议常用的概念有哪些?
javascript·后端·node.js
还是鼠鼠8 小时前
Node.js中间件的5个注意事项
javascript·vscode·中间件·node.js·json·express
南通DXZ11 小时前
Win7下安装高版本node.js 16.3.0 以及webpack插件的构建
前端·webpack·node.js
你的人类朋友12 小时前
浅谈Object.prototype.hasOwnProperty.call(a, b)
javascript·后端·node.js
前端太佬12 小时前
暂时性死区(Temporal Dead Zone, TDZ)
前端·javascript·node.js
Mintopia12 小时前
Node.js 中 http.createServer API 详解
前端·javascript·node.js
你的人类朋友13 小时前
CommonJS模块化规范
javascript·后端·node.js
Mintopia1 天前
Node.js 中 fs.readFile API 的使用详解
前端·javascript·node.js
咖啡教室1 天前
nodejs开发后端服务详细学习笔记
后端·node.js