【问题标题】:How to reset versions in Package.json如何在 Package.json 中重置版本
【发布时间】:2025-12-04 23:05:02
【问题描述】:

我有大约 20 个 react 项目,所有这些项目都有 package.json 文件。我有这样的包:

"@material-ui/core": "4.11.4",
"@material-ui/icons": "4.11.2",
"@material-ui/lab": "4.0.0-alpha.58",
"@material-ui/styles": "4.11.4",

我需要遍历每一行并将它们更新为“0.0.0”。是否有一个正则表达式可以匹配"***.***.***" 并将其替换为“0.0.0”?

我需要这样做的原因: 我创建自己的包。我将它们从一个位置移动到另一个位置,因此它们的版本又从 0 开始。如果我执行 npm 检查更新,例如包是 5.8.34,它不会将其更新回 0.0.1。但是如果我将它们的所有值更新为 0.0.0 然后运行 ​​npm check updates 它将更新为 0.0.1。

另外,为什么有人会在这里投票-1?不喜欢这个问题或不知道答案?我在这里提供了我需要完成的所有内容,下面是我尝试的一些正则表达式。你为什么还要投-1票?

我试过了: : "[0-9].+?"

到目前为止,这是最好的工作 : "[0-9].[0-9].[0-9]"

它不会找到包名称中包含字母的那些,例如"@material-ui/lab": "4.0.0-alpha.58"。如果有人分享更好的解决方案,我会更新问题。

这纯粹是一个问题,如何将 Package.json 文件中的 Packages 版本重置为 0.0.0。

【问题讨论】:

  • 为什么要改成“0.0.0”?
  • 我创建了自己的包。我将它们从一个位置移动到另一个位置,因此它们的版本又从 0 开始。如果我执行 npm 检查更新,例如包是 5.8.34,它不会将其更新回 0.0.1。但是,如果我将它们的所有值更新为 0.0.0 然后运行 ​​npm check updates 它将更新为 0.0.1。

标签: javascript reactjs regex


【解决方案1】:

如果所有包都以数字开头,后跟点和单词字符,单词字符之间可以选择有连字符,您可以使用捕获组并在替换中使用它。

图案:

("[^\s"]+":\s*")\d+(?:\.\w+(?:-\w+)*)+",

模式匹配:

  • ( 捕获 group 1(在示例代码中用 $1 表示)
    • "[^\s"]+":\s*" 匹配 "..." 然后 : 和可选的空白字符
  • )关闭第一组
  • \d+ 匹配 1+ 个数字
  • (?:非捕获组
    • \.\w+(?:-\w+)* 匹配 . 1+ 个单词字符,可选 - 和 1+ 个单词字符
  • )+关闭非捕获组,重复1+次
  • ", 匹配双引号和逗号

替换为

$10.0.0",

Regex demo

const regex = /("[^\s"]+":\s*")\d+(?:\.\w+(?:-\w+)*)+",/;
[
  `"@material-ui/core": "4.11.4",`,
  `"@material-ui/icons": "4.11.2",`,
  `"@material-ui/lab": "4.0.0-alpha.58",`,
  `"@material-ui/styles": "4.11.4",`
].forEach(s => console.log(s.replace(regex, `$10.0.0",`)));

【讨论】:

    【解决方案2】:

    我猜

    : "[0-9].+?"
    

    : "0.0.0"
    

    应该足够了(并且不应该匹配太多的东西,但你肯定会在提交更改之前检查...)

    【讨论】:

    • 这也匹配这个: "64x64 32x32 24x24 16x16"
    • 它也匹配: "0px"
    • 也许将您的搜索和替换限制为 package.jsons :)