0-2-yarn和npm的常用命令

npm介绍

npm 是世界上最大软件包仓库

最后来聊 npm 。Node.js 引发了前后端开发的爆发,尤其是前端。 JS 开发者众多,所以贡献开源代码的人就非常多,所有这些凝结成了 npm 这个世界上最大的软件包仓库。

npm 是 Node Package Manager 的缩写,意思是 Node 的包管理系统。Nodejs 现在如日中天,其中 npm https://www.npmjs.com/ 这个功不可没。在这里,我们要实现各种功能几乎都能找到现成的别人写好的包,直接拿了用就好了。

很多 npm 包都对应一个 Github 项目,但是如果只有代码,那么使用起来还不是特别方便。而当系统上安装好了 Node.js 之后,就会配套安装一个命令,叫做 npm 。

npm install moment

执行 npm install moment 就可以把 moment 这个包从 npm 的软件包仓库中下载这个包,然后安装到本地了。而 npm 的软件包仓库中,有数以万计的 moment 这样的包。

通过 npm 装包的方式,开发中我们再也不用重造轮子了。

类似python里面的pip包管理器,

npm常用命令

npm常用命令
npm -v 查看版本

1.初始化项目
npm init -y
创建一个项目,默认会生成package.json文件

2.安装模块
全局安装
npm install 模块名 -g 
本地安装

npm install 模块名
如果这个模块是用户会使用到的,这个命令后面需要加上--save,这样package.json中的dependencies会自动添加这个模块依赖

npm install 模块名 --save
如果这个模块仅仅是开发者使用,后面加上--save-dev就可以了,这样package.json中的devDependencies会自动添加这个模块依赖

npm install 模块名 --save-dev
如果安装指定版本,模块名需要加版本号

npm install 模块名@1.0.0

安装所有依赖
npm install
简写为:npm i
    安装模块到默认dependencies
npm i axios
    安装到配置的全局目录下
npm i axios -g
    安装包信息将加入到dependencies生产依赖
npm i axios -S
    安装包信息将加入到devDependencies开发依赖
npm i axios -D
    安装axios指定的6.5.3版本
npm i axios@6.5.3


3.卸载模块
卸载本地模块
npm uninstall 模块名
卸载全局模块
npm uninstall 模块名 -g

4.更新模块
更新本地模块
npm update 模块名
更新全局模块
npm update 模块名 -g 
更新模块到指定版本
npm update 模块名@1.0.0


npm 查看命令(以axios为例)
    查看项目中依赖所在的目录
npm root
    查看全局安装的依赖所在目录
npm root -g
    查看已安装依赖的列表
npm list 
或者
npm ls
同样后面可以加 -g 查看全局安装的包,


npm其他命令(以axios为例)
    清除npm的缓存
npm cache clean
    清除项目中没有被使用的依赖
npm prune
    检查依赖是否已经弃用
npm outdated
npm view 包名,这是查看的远程仓库的包情况,

npm镜像
在开发过程中,npm有时下载安装包速度很慢,推荐使用镜像解决这个问题,需要安装cnpm工具。

npm install -g cnpm --registry=https://registry.npm.taobao.org
安装完成后,可以使用cnpm管理模块。如果要安装一个模块,把之前的命令替换为cnpm install 模块名就可以了。

npm install 原理:

1.首先得有package.json 包管理文件 才可以执行npm install

2.npm install -> 看是否有package-lock.json文件,

3.没有package-lock.json文件,则构建依赖关系,然后从registry仓库(https://registry.npmjs.org) 下载安装包(压缩文件),将压缩包添加到本地的缓存文件中再将下载的压缩包解压到node_modules中,同时生成package-lock.json文件,完成安装

4.有package-lock.json文件,则先检查下载的包和package-lock.json文件中的包版本是否符合semver 版本规范,不一定非要完全一样,像 2.2.1 和 2.2.2 是一样的

5.不一致,则重新构建依赖关系,然后就是和第三部一样,去仓库下载,加压,添加缓存,解压到 node_modules中,生成新的package-lock.json

6.一致,则会去本地缓存文件中去查找缓存文件(通过查找算法),找到缓存文件,将压缩包解压到 node_modules中,完成安装

yarn介绍

yarn是什么?
yarn是由Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具,yarn是为了弥补 npm 的一些缺陷而出现的

npm的缺陷:
npm install的时候巨慢,新的项目拉下来要等半天
yarn的优点:速度快

yarn常用命令

yarn 安装
npm install -g yarn

查看版本
yarn -v

开始一个新工程
yarn init 与 npm init 一样通过交互式会话创建一个 package.json
yarn init # yarn
 

跳过会话,直接通过默认值生成 package.json
yarn init --yes # 简写 -y

添加一个依赖
通过 yarn add 添加依赖会更新 package.json 以及 yarn.lock 文件

1).开发环境
yarn add --dev 依赖会记录在 package.json 的 devDependencies 下 开发环境
yarn add webpack --dev # yarn 简写 -D

2).生产环境
yarn add 依赖会记录在 package.json 的 dependencies 下 生产环境
yarn add webpack@2.3.3 # yarn --save 是 yarn 默认的,默认记录在 package.json 中

3).全局
yarn global add 全局安装依赖
yarn global add webpack # yarn

更新一个依赖
yarn upgrade # 升级所有依赖项,不记录在 package.json 中
yarn upgrade webpack # 升级指定包
yarn upgrade --latest # 忽略版本规则,升级到最新版本,并且更新 package.json

移除一个依赖
yarn remove
安装 package.json 中的所有文件

yarn 或者 yarn install
yarn install # 或者 yarn 在 node_modules 目录安装 package.json 中列出的所有依赖
yarn install 安装时,如果 node_modules 中有相应的包则不会重新下载 --force 可以强制

重新下载安装
yarn install --force # 强制下载安装

运行脚本
yarn run 用来执行在 package.json 中 scripts 属性下定义的脚本
// package.json
{
"scripts": {
"dev": "node app.js",
"start": "node app.js"
}
}
yarn run dev # yarn 执行 dev 对应的脚本 node app.js
yarn start # yarn

显示某个包信息
yarn info

列出项目的所有依赖
yarn list
yarn list # 列出当前项目的依赖
npm list # npm
yarn list --depth=0 # 限制依赖的深度
sudo yarn global list # 列出全局安装的模块

缓存
yarn cache
sudo yarn cache list # 列出已缓存的每个包
sudo yarn cache dir # 返回 全局缓存位置
sudo yarn cache clean # 清除缓存


package-lock.json 和 yarn.lock

NPM 和 YARN 是两个不同的包管理系统, 其中 NPM 生成 package-lock.json, YARN 生成 yarn.lock, 这两个文件记录当前项目所依赖的各个包的版本。

最安全的做法是在每次依赖关系发生变化时生成并提交它们。 但是, 这可能很麻烦, 或者两个文件可能不同步。所以现在的一般做法是只保留其中一个文件, 忽略另外一个文件, 这取决于当前使用的包管理系统。

推荐使用 YARN, 即保留 yarn.lock, 而且每次变动需要提交该文件。

什么是package.json文件

package.json记录当前项目中下载了哪些包(npm install xxx 包信息),记录你下载的包信息(地址、版本号等),不包含依赖包信息。

package.json文件记录你项目中所需要的所有模块。当你执行npm install的时候,node会先从package.json文件中读取所有dependencies信息,然后根据dependencies中的信息与node_modules中的模块进行对比,没有的直接下载,已有的检查更新。另外,package.json文件只记录你通过npm install方式安装的模块信息,而这些模块所依赖的其他子模块的信息不会记录。

什么是package-lock.json文件

package-lock.json 就是用以记录当前状态下安装的各个npm package的具体来源和版本号,模块下载地址、及这个模块又依赖了哪些依赖。在首次安装依赖包时会创建package-lock.json文件。

npm5以前没有package-lock.json这个文件,需要保存依赖信息,每次安装时都要加上--save参数;npm5以后版本加入了package-lock.json文件。当安装包的时候,不需要加上--save参数,它会自动保存依赖信息,且会生成或更新package-lock.json这个文件。

为什么有了package.json,还需要package-lock.json文件呢?

当项目中已有package-lock.json 文件,在安装项目依赖时,将以该文件为主进行解析安装指定版本依赖包,而不是使用 package.json 来解析和安装模块。因为 package 只是指定的版本不够具体,而package-lock 为每个模块及其每个依赖项指定了版本,位置和完整性哈希,所以它每次创建的安装都是相同的。

package-lock.json 文件主要作用有以下两点:

①.当删除node_module目录时,想通过npm install 恢复所有包时,提升下载速度。
②.锁定版本号,防止自动升级新版本。

package.json文件中dependencies和devDependencies的区别

首先,两个都是此项目的依赖:

1、dependencies 是发布到生产环境的,而 devDependencies 里面的插件只用于开发环境,不用于生产环境。
2、dependencies 是项目正常运行所需要的依赖,而devDependencies则是开发者开发时整个项目所需的依赖(如会有一些测试依赖之类的)。

其次,区别是:

1、使用 --save-dev 安装的插件,会被写入到 devDependencies 对象里面去;
2、使用 --save 安装的插件,会被写入到 dependencies 对象里面去。

最后,范例:

npm install --save ***** //会下载到node_modules目录中,并修改package.json(dependencies中会增加)
npm install --save-dev *** //会下载到node_modules目录中,并修改package.json(devDependencies中会增加)
npm install **** // 会下载到node_modules目录中,不会修改package.json
npm install ***** --save //会下载到node_modules目录中,并修改package.json(dependencies中会增加)
npm install //会默认安装两种依赖```

posted @ 2021-09-13 22:18  技术改变命运Andy  阅读(188)  评论(0编辑  收藏  举报