node.js之包管理工具

270 阅读5分钟

前言

即使我们没有深入了解过node,但是大家一定知道包管理工具,因为我们在使用vue或者其他框架的时候,一般都会用到包管理工具.今天我们从Node.js角度深入学习包管理工具。

包管理工具

包是将一些特定功能或者API封装到一个文件夹里,那么这个文件夹就称之为包。而包管理工具就是管理(下载安装,引入,删除等)这些包的工具。

包管理工具一般有以下几种:

  • npm
  • cnpm
  • yarm

包的加载机制

我们在使用包管理工具的时候,当使用require引入第三方包的时候,遵循以下机制:

  1. 优先在加载该包模块(如:package.json)同级的node_modules中查找第三方包。
  2. 找到该第三方包中的package.json文件,并且找到里面的main属性对应的入口模块,该入口模块即为加载的第三方模块。
  3. 如果在要加载的第三方包中没有找到package.json文件或者是package.json文件中没有main属性,则默认加载第三方包中的index.js文件。
  4. 如果在加载第三方模块的文件的同级目录没有找到node_modules文件夹,或者以上所有情况都没有找到,则会向上一级父级目录下查找node_modules文件夹,查找规则如上一致。
  5. 如果一直找到该模块的磁盘根路径都没有找到,则会报错:can not find module xxx

npm

npm是Node.js默认的包管理工具,因此只要我们下载了Node.js,就会有特定版本的npm。可以通过以下命令查看npm的版本。

npm -v

npm的安装

如果想要安装其他版本的npm,可以采用以下命令

npm install npm@version
npm install npm -g  // 默认安装最新版本

npm 默认是安装在当前正在使用 Node 版本所在目录下。

npm的使用

1. 项目初始化

// 有提示问答的可选配置
npm init
// 快速创建
npm init -y
或npm init --yes    

初始化成功后,会生成一个package.json文件,内容如下:

{
  "name": "node",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
  1. name: 包名,不能使用中文、大写,默认值是文件夹的名称
  2. version:版本号要求 x.x.x 的形式定义,x 必须是数字,默认值是 1.0.0
  3. description:描述信息
  4. main: 入口文件
  5. scripts: 脚本配置,用于简化命令
  6. author: 作者信息
  7. license: 证书
  8. package.json 可以手动创建与修改

2. 如何找包

方式1:使用命令行

npm s 关键字

方式2: npm网站搜索: www.npmjs.com/

3. 下载安装包

npm install 包名
npm i 包名

下载完成后,会新增两个文件夹

  • node_modules 文件夹 存放下载的包
  • package-lock.json 包的锁文件,用来锁定包的版本

但是在实际项目中,我们一般都会根据环境选择合适的命令。

  • 开发环境: 我们自己的开发电脑
  • 生产环境: 服务器

根据我们包对环境的依赖主要分为以下两种:

  • 生产依赖:开发阶段和最终上线运行阶段都用到的依赖包使用npm i -S 包名或npm i --save 包名。包信息保存在 package.json 中 dependencies 属性
  • 开发依赖:只在开发阶段使用的依赖包。使用命令npm i -D 包名或npm i --save-dev 包名。包信息保存在 package.json 中 devDependencies 属性

对于有的包,我们可能需要全局安装,这样在命令行的任何位置都可以使用,安装命令如下:

npm i -g 包名

4. 安装包依赖

这个在我们用vue开发项目中经常会遇到

npm install  或者npm i

5. 安装特定版本的包

npm i 包名@版本号

6. 删除依赖

// 局部删除
npm remove 包
或 npm r 包

// 全局删除
npm remove-g 包名

5. 配置命令别名

通过配置命令别名可以更简单的执行命令.配置 package.json 中的 scripts 属性

{
"scripts": {
		"server": "node server.js",
		"start": "node index.js",
	}
}

6. 卸载指定的包

npm uninstall 包名

7. 更新指定的包

npm update 包名

8. 配置npm镜像资源

由于npm的下载地址在国外,下载很慢,我们可以通过配置镜像,这样下载会很快。

方式1: 临时切换镜像源

npm install [package] --registry [https://xxx]
// 淘宝镜像
npm install express --registry https://registry.npmmirror.com/

方式2: 切换镜像源

npm config set registry https://registry.npmmirror.com/

方式3: 通过NRM切换镜像源 推荐

npm install -g nrm
nrm use taobao

cnpm

cnpm 是一个淘宝构建的npmjs.com的完整镜像,也称为『淘宝镜像』,网址npmmirror.com/ cnpm 服务部署在国内 阿里云服务器上,可以提高包的下载速度

官方也提供了一个全局工具包 cnpm ,操作命令与 npm 大体相同

安装

npm install -g cnpm --registry=https://registry.npmmirror.com

常用命令

功能命令
初始化cnpm init / cnpm init
安装包cnpm i uniq cnpm i -S uniq cnpm i -D uniq cnpm i -g nodemon
安装项目依赖cnpm i
删除cnpm r uniq

yarn

yarn 是由 Facebook 在 2016 年推出的新的 Javascript 包管理工具

安装

npm i -g yarn

常用命令

功能命令
初始化yarn init / yarn init -y
安装包yarn add uniq 生产依赖 yarn add less --dev 开发依赖 yarn global add nodemon 全局安装
删除包yarn remove uniq 删除项目依赖包 yarn global remove nodemon 全局删除包
安装项目依赖yarn
运行命令别名yarn <别名> # 不需要添加 run

包管理工具不要混用