前言
即使我们没有深入了解过node,但是大家一定知道包管理工具,因为我们在使用vue或者其他框架的时候,一般都会用到包管理工具.今天我们从Node.js角度深入学习包管理工具。
包管理工具
包是将一些特定功能或者API封装到一个文件夹里,那么这个文件夹就称之为包。而包管理工具就是管理(下载安装,引入,删除等)这些包的工具。
包管理工具一般有以下几种:
- npm
- cnpm
- yarm
包的加载机制
我们在使用包管理工具的时候,当使用require引入第三方包的时候,遵循以下机制:
- 优先在加载该包模块(如:package.json)同级的
node_modules中查找第三方包。 - 找到该第三方包中的
package.json文件,并且找到里面的main属性对应的入口模块,该入口模块即为加载的第三方模块。 - 如果在要加载的第三方包中没有找到
package.json文件或者是package.json文件中没有main属性,则默认加载第三方包中的index.js文件。 - 如果在加载第三方模块的文件的同级目录没有找到
node_modules文件夹,或者以上所有情况都没有找到,则会向上一级父级目录下查找node_modules文件夹,查找规则如上一致。 - 如果一直找到该模块的磁盘根路径都没有找到,则会报错:
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"
}
- name:
包名,不能使用中文、大写,默认值是文件夹的名称 - version:
版本号要求x.x.x的形式定义,x必须是数字,默认值是1.0.0 - description:描述信息
- main: 入口文件
- scripts: 脚本配置,用于简化命令
- author: 作者信息
- license: 证书
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 |
包管理工具不要混用