Angular Browserslist:caniuse-lite已过时。请运行下一个命令`npm update`


11

我最近开始在我正在工作的Angular 8项目(节点v10.16.0)上收到此错误。运行npm update caniuse-lite browserslist没有任何作用

所以我删除了package-lock.json,删除了node_modules并运行了npm install,但是browserlist文件已经消失了。同样,当我运行ng build时,我得到相同的消息:Browserslist:caniuse-lite已过时。请运行下一条命令npm update

我在同一主题上看到此帖子: Browserslist:caniuse-lite已过时。请运行下一个命令`npm update caniuse-lite browserslist`, 但是它涉及WebCompiler和autoprefixer,我不知道这些。请指导


问:您是否使用Visual Studio创建了这个Angular项目?问:当您仅遵循说明并运行时会发生什么npm update caniuse-lite browserslist
FoggyDay '19

1
是的,Angular项目正在使用Visual Studio2017。当我使用npm update caniuse-lite浏览器列表时,没有任何反应。什么都没有安装……
SilverFish

由于在我全新安装npm之后浏览器列表文件消失了(caniuse-lite在其中),您是否建议我应该在浏览器列表中运行npm?
SilverFish

我只是有同样的问题。在phpstrom它告诉我跑npm update,但这并没有解决问题,只是做了我的打字稿版本为高角8
BlakkM9

1
我也有同样的问题,使用Visual Studio代码的Angular 8,虽然我不确定为什么编辑器会引起这种冲突。对此有任何答案吗?我们本周应该发布一个巨大的新功能,当然现在我们的应用程序将无法构建。我使用浏览器列表看到了几个node_modules
HomeBrew

Answers:


8

通过运行以下命令解决了caniuse-lite过时的问题。

npm cache clean  # optional
npm install caniuse-lite@latest --save

npm cache clean无法直接使用,因为它是由npm在最新版本中自动处理的。您要我们使用--force吗?如果是,请说明为什么要取消缓存。
Vishnudev

1
npm缓存清理不是必需的。您可以直接运行npm install caniuse-lite@latest --save
Dipten

1
将caniuse-lite添加到您的应用程序(通过package.json bloat)不是一个好主意,因为它不是您应用程序的依赖项-仅是您的npm工具集。请参阅下面的详细说明。另外,“-save”是多余的,因为它现在是install的默认操作。
jdh

这会为我成功安装caniuse-lite,但仍然出现相同的错误。
nullmn

我尝试使用节点10.x并修复了该问题。请检查您的节点版本。
Dipten

2

TLDR:(在没有解释的情况下似乎违反直觉)

  npm install caniuse-lite browserslist
  npm uninstall caniuse-lite browserslist

说明:

如果发现已安装的caniuse-lite版本比当前版本早2个版本,则会在构建/启动过程中由浏览器列表中的脚本输出此警告消息(“ canisuse-lite已过时,请....”)。如果项目中的任何内容都没有更改,并且在启动或构建项目时突然看到此消息,则可能意味着caniuse-lite有最新版本的更新。

不幸的是,仅当您将caniuse-lite安装为项目的依赖项时,browserslist所显示的msg文本才有用。您很可能没有。因此,当您运行建议的“ npm update caniuse-lite”或“ npm update'caniuse-lite @ latest”(或“ npm install”)时,npm不会在package.json依赖项中看到该软件包,因此它会忽略请求。

这些包如何成为依赖项?在创建项目时(可能使用应用程序angularapp或create-react-app或类似的框架),npm安装的browserslist是其所需工具的依赖项,而不是项目的依赖项之一。同时,caniuse-lite被安装为浏览器列表的依赖项。后来在更新项目时,创建了package-lock.json文件,该文件将所有依赖项锁定到特定版本。

如果您能够在package-lock.json的依赖项列表中更新版本信息,那么运行“ npm install”将更新node_modules中的这些软件包。您不应该手动编辑package-lock.json。相反,最好的方法是:

  1. 暂时使这些软件包成为您项目的依赖项:

    npm install caniuse-lite浏览器列表

    除了将软件包更新到最新版本外,这还将更新package.json和(最重要的是)package-lock.json中的依赖项列表。

  2. 删除这些程序包作为项目的直接依赖项:

    npm卸载caniuse-lite浏览器列表

    由于其他依赖项使用了这些软件包,因此不会将它们从node_modules中删除。仅package.json被更新以将其删除为项目依赖项。

  3. 提交package-lock.json。现在其他任何人都可以运行“ npm install”来从package-lock.json中的子依赖项列表中获取更新的两个软件包,并停止警告消息。


我已经尝试过您的解决方案,但是此消息仍然警告我(浏览器列表:caniuse-lite已过时。请运行下一个命令npm update),并且使用干净的角度设置。
Alexander Kushnir

@AlexanderKushir-在第1步中完成安装后,在node_modules中查找browserslist和caniuse-lite,以检查它们各自package.json中的版本是否已更新(caniuselite应该为1.0.30001019,浏览器列表应该为4.8.3,如今天的)。新版本的browserlist(4.8.3)仅在未更新canisuelite时才抱怨。是否有可能在.npmrc中设置了不更新这两个软件包的缓存服务器?(如果您愿意,请尝试在安装之前重命名.npmrc吗?)
jdh

我只需要为此做所有事情,caniuse-lite消息就消失了
MoonStom

@MoonStom-如果仅安装caniuse-lite,则将其添加为应用程序的依赖项,这是不准确的。问题出在npm和browserslist中。修复这些问题后,您的应用不应再依赖于caniuse-lite。
jdh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.