首页 > 解决方案 > 如何在 Package.json 中重置版本

问题描述

我有大约 20 个反应项目,所有这些项目都有 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。

标签: javascriptreactjsregex

解决方案


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

图案:

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

模式匹配:

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

用。。。来代替

$10.0.0",

正则表达式演示

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",`)));


推荐阅读