我有一个较旧的 CRA 项目,在使用
npm install
或 npm update
时遇到问题,例如:
$ npm update
npm ERR! code EINVALIDTAGNAME
npm ERR! Invalid tag name ">=^16.0.0" of package "react@>=^16.0.0": Tags may not have any characters that encodeURIComponent encodes.
npm ERR! A complete log of this run can be found in: /Users/abcd/.npm/_logs/123456.log
如果我运行
Invalid tag name
,我会得到同样的 npm install --legacy-peer-deps
错误。
package.json
中的任何依赖项条目都没有按照错误消息中描述的方式格式化的标签,包括react
依赖项。
我正在使用
npm
v10.1.0。
我在此项目的
dependencies
文件中列出了 33 个包,其中package.json
。
一个问题是
npm
写入的调试日志文件不包含有关 package.json
中的哪个包出现此安装问题的信息。
为了深入解决这个问题,我使用
--legacy-peer-deps
选项手动重新安装了 33 个包依赖项,例如:
$ npm install --legacy-peer-deps react@^16.8.6
...
$ npm install --legacy-peer-deps react-bootstrap-table-next@^4.0.3
...
等等。完成此操作后,如果我运行
Invalid tag name
,我仍然会遇到相同的 npm install
错误。但是,如果我运行npm install --legacy-peer-deps
,就没有错误。
我的问题是:
如何找出需要更新的特定包,以便我可以在整个项目上运行
npm install
,而不会出现 Invalid tag name
错误,并且不需要添加旧版对等依赖项?
手动连续安装每个软件包并没有发现任何
Invalid tag name
错误,但我在安装它们时必须使用--legacy-peer-deps
选项。
当我不使用
--legacy-peer-deps
选项时,尝试自行安装 33 个软件包会导致 Invalid tag name
错误。
我试图避免对 33 个软件包依赖项中每一个的最新版本进行全面更新,特别是因为主要版本之间的 API 更改。例如,从 React 16 到 18(虽然很理想,但我确信)几乎肯定会破坏项目并强制进行重大重写。
除非问题完全是由其他原因引起的,否则我会尝试了解如何从
npm
中获取更多信息,以解决哪个特定的包依赖项有问题并进行更新。
您可以删除
node_modules
,并注释一半的依赖项,然后运行npm i
。如果错误消失,则表示您已消除了 50% 的依赖项,这些依赖项可能导致错误。冲洗并重复,直到找到罪魁祸首:D.
您还可以在node_modules内的所有文件中搜索
>=^16.0.0
,将显示具有此作为对等点或类似内容的包。