Skip to content

npm和yarn常用命令对比合集 #79

@LightXJ

Description

@LightXJ

查看版本

npm -v
yarn -v

查看依赖

yarn list 查看本地依赖
yarn list --depth=0 查看本地依赖,深度为0
yarn list --pattern gulp 筛选出依赖
yarn global list 列出全局安装的依赖

npm ls 查看本地依赖
npm ls -g 查看全局依赖
npm ls —depth 查看本地依赖,深度为0

查看安装路径

查看全局安装路径
yarn global dir
npm config get prefix

查看本地安装路径
npm root

查看依赖包信息

yarn info react 展示依赖包信息,注意,这时依赖包并没有被安装在本地
npm info react

yarn list --depth=0 查看安装过的依赖包和版本
npm ls --depth=0 查看安装过的本地依赖版本

管理配置文件

查看配置key的值
yarn config list 查看当前的配置【yarn没有全局配置】
yarn config get
yarn config delete
yarn config set

通过配置文件
.npmrc文件,对应npm
registry=http://registry.npm.taobao.org/

.yarnrc文件,对应yarn
registry http://registry.npm.taobao.org/

查询镜像[镜像不分本地和全局]

npm config get registry
yarn config get registry

设置镜像[镜像不分本地和全局]

npm config set registry http://registry.npm.taobao.org/
yarn config set registry http://registry.npm.taobao.org/

安装

全局安装
npm install -g webpack
yarn global add webpack

生产环境 dependencies
npm install webpack
yarn add webpack

开发环境 devDependencies
npm install webpack --dev
yarn add webpack --dev

删除

删除全局安装的包
npm uninstall -g webpack
yarn global remove webpack

删除本地安装的包【会更新到package.json】
npm uninstall webpack
yarn uninstall webpack

全局yarn

和 npm 在全局安装操作时需要使用 -g 或者 --global 标志不同,Yarn 命令需要用 global 作为前缀。和 npm 一样,具体项目的依赖性不应该全局安装。
global 前缀仅适用于 yarn add,yarn bin,yarn list 和 yarn remove、upgrade、upgrade-interactive。除了 yarn add,这些命令都和 npm 命令一样。

npm和yarn设置镜像会冲突吗

尝试回答:不会,用什么工具就用哪个配置的镜像
以上说法不对,实践是如果npm和yarn都设置过镜像,yarn会使用npm设置的镜像,npm还是使用npm的,不被yarn影响

实际操作结果如下:
1、npm和yarn都没有设置过源
➜ eslintTest git:(master) ✗ yarn config get registry
https://registry.yarnpkg.com
➜ eslintTest git:(master) ✗ npm config get registry
https://registry.npmjs.org/
yarn进行安装时,会按照yarn的官方源下载并生成yarn.lock文件

npm进行安装时,会按照npm的官方源下载并生成package-lock.json文件

2、yarn设置过源,npm没有设置过源
➜ eslintTest git:(master) ✗ yarn config get registry
http://registry.npm.taobao.org/
➜ eslintTest git:(master) ✗ npm config get registry
https://registry.npmjs.org/
yarn 安装,会按照yarn设置的源进行安装

npm安装,会按照默认npm源进行安装

3、yarn和npm都手动设置源,且设置的不同时
例如,yarn设置源为淘宝源,npm设置官方源
yarn config set registry http://registry.npm.taobao.org/
npm config set registry https://registry.npmjs.org
查看源
➜ eslintTest git:(master) ✗ yarn config get registry
http://registry.npm.taobao.org/
这里要注意,虽然返回的是yarn自己设置的源,但是用yarn config list看一下,会发现,yarn config 和 npm config 都被列了出来,且npm config跟在yarn config后面,

➜ eslintTest git:(master) ✗ yarn config list
yarn config v1.22.10
info yarn config
{
...
registry: 'http://registry.npm.taobao.org/',
'strict-ssl': true,
'user-agent': 'yarn/1.22.10 npm/? node/v12.14.1 darwin x64',
lastUpdateCheck: 1618542996533
}
info npm config
{
...
'zmq-prebuilt-binary-host-mirror': 'https://npm.taobao.org/mirrors/zmq-prebuilt/v{version}',
'//registry.npmjs.org/:_authToken': 'd32a8004-6887-4f77-a638-c75496a138ac',
registry: 'https://registry.npmjs.org'
}
用yarn安装时,可以看到,是使用了npm设置的源

用npm安装,也是使用了npm设置的源。

以上实践证明,如果yarn和npm同时设置了源,不管先后顺序,npm设置的源会影响yarn,但是yarn不会影响npm

lock文件的作用

yarn.lock 中会准确的存储每个依赖的具体版本信息,以保证在不同机器安装可以得到相同的结果。

下面以@babel/code-frame为例,看看yarn.lock 中会记录哪些信息。

  • 第一行 "@babel/code-frame@7.0.0-beta.54" 包的name和语义化版本号,这些都来自package.json中的定义。
  • version 字段,记录的是一个确切的版本。
  • resolved 字段记录的是包的URL地址。
  • dependencies 字段记录的是当前包的依赖,即当前包在 package.json 的 dependencies 字段中的所有依赖。
    Yarn 在安装期间,只会使用当前项目的 yarn.lock 文件(即 顶级 yarn.lock 文件),会忽略任何依赖里面的 yarn.lock 文件。在顶级 yarn.lock 中包含需要锁定的整个依赖树里全部包版本的所有信息。
    yarn.lock文件是在安装期间,由 Yarn 自动生成的,并且由yarn来管理,不应该手动去更改,更不应该删除yarn.lock文件,且要提交到版本控制系统中,以免因为不同机器安装的包版本不一致引发问题。(也就是说,只要提交了yarn.lock文件,别人就会按照这个里面的内容进行安装,设置registry不会影响安装源)
    实践如下:
    1、去掉npm的源、设置yarn的源为公司内部私有源
    npm config delete registry
    yarn config set registry http://private.r.npm.com
    2、安装公司的私有包
    yarn add privatePackage
    会看到生成的yarn.lock文件中,源为私有源
    3、指定yarn的源为淘宝源,删除node_modules重新安装
    yarn config set registry http://registry.npm.taobao.org/
    如果按照新的源安装肯定会报错,因为淘宝源没有公司的私有包,但是并没有报错,node_modules也都安装成功了,yarn.lock相比之前也并没有修改。说明,只要指定了yarn.lock,就会按照yarn.lock中的内容区安装,和其他的配置没有关系了。因此可以使用这个文件来防止不同机器安装的包版本不一致。
    ➜ eslintTest git:(master) ✗ yarn
    yarn install v1.22.10
    [1/4] 🔍 Resolving packages...
    success Already up-to-date.
    ✨ Done in 0.14s.

生成lock文件后,安装的时候,install命令后跟的--registry还会影响源吗?

通过上面的例子,发现不会影响,但是如果是新增包的话会影响

快捷管理镜像

用nrm快速管理npm的镜像,不过不太必要,毕竟切换源不是很高频的操作

yarn和npm的区别

https://juejin.cn/post/6844903582903320589

参考

1、前端工程师应该知道的yarn知识
https://juejin.cn/post/6844903981668368392

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions