Suppress npm WARN deprecated messages in npm install.

我们在给项目安装依赖的时候,经常出现 npm WARN deprecated 警告,介绍几种 npm 隐藏弃用警告的方法(教程也适用于 yarnpnpm 等 Node.js 包管理器)

如果一个 npm 包的维护者强烈希望用户将他的包升级到一个新版本,或者维护者不再维护这个包,那么他就可能将他的包(部分版本或所有版本)标记为弃用(deprecate)
被标记为弃用的包在安装时会发出警告:

1
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.

如果你的项目直接依赖那个包,你可能会升级那个包来避免出现警告;
但如果那个包被间接依赖,你通常什么也做不了,只能等待包维护者处理,出现这种情况,您可能会想要隐藏弃用警告


有这几种常见的方法来抑制 deprecated 警告:

  • 设置 Log Level
    • 优点:简单,而且可以直接对所有包生效
    • 缺点:会同时隐藏项目中其他的警告,出错时不易调试
  • 修改锁文件(lock-file)
    • 优点:只隐藏弃用警告,而且可以指定隐藏哪个包的警告
    • 缺点:需要项目有锁文件

设置 Log Level

方法一:一次性设置(只对本次安装生效)

使用 --loglevel=error 参数,如:

1
npm i --loglevel=error

也可以使用环境变量 npm_config_loglevel=error(需要注意,都是小写的),如:

1
npm_config_loglevel=error npm i

方法二:对一个项目生效

编辑项目 rc(run-command) 文件 .npmrc(也可能是 .yarnrc,取决于你使用的 Node.js 包管理器)文件(如果不存在,可以新建),设置 loglevel,例:

1
loglevel=error

方法三:全局生效

编辑 ~/.bashrc 文件(不同 shell 的 rc 文件名可能不同,你可能需要自行搜索你的 shell 的 rc 文件,在此就不细说,cmd.exe 不支持)
添加一行 export 命令:

1
export npm_config_loglevel=error

此方法重启 shell 才会生效


修改锁文件

  1. 首先需要确认你的项目是否开启了锁文件,查看项目 rc(run-command) 文件 .npmrc(也可能是 .yarnrc,取决于你使用的 Node.js 包管理器)文件:

    1
    package-lock=false

    如果项目没有 rc 文件,或 package-lock 不为 false,则说明锁文件在项目中启用
    如果出现了 package-lock=false,那么我们需要将 false 改为 true

  2. 运行一次 npm i
    如果锁文件不存在/数据不全,此操作会自动补全锁文件的数据

  3. 查找锁文件
    不同 Node.js 包管理器锁文件名称也不一样,可参考:

    包管理器锁文件
    npmpackage-lock.json
    yarnyarn.lock
    pnpmpnpm-lock.yaml
  4. 修改锁文件
    搜索 deprecate 关键字:
    带有 deprecate 关键字的行
    我们可以看到所有被标记为弃用的包
    若要隐藏一个包的弃用警告,将包名下带有 deprecate 关键字的行移除即可(如果是 json 格式,你可能还需要移除末尾逗号)