You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jq或Linux工具移除package.json中@glen/包的版本后缀?

移除package.json中@glen/前缀包的版本标签方案

我正在开发一个依赖内部npm包的Web应用,这些包均以@glen/为前缀。需要解析并修改package.json文件,专门移除这类包版本号中的-dev.3和-rc.0标签——例如将"@glen/manager": "^3.0.0-rc.0"修改为"@glen/manager": "^3.0.0"。优先使用jq工具实现,也接受Linux环境下的其他解决方案。

原始package.json

{
  "name": "@glen/web_trans",
  "version": "1.0.0",
  "scripts": {
    "build": "nuxt build",
    "dev": "nuxt dev",
    "generate": "nuxt generate",
    "prepare": "husky install"
  },
  "devDependencies": {
    "@glen/manager": "^3.0.0-rc.0",
    "@glen/handler": "^1.3.6",
    "@glen/extension": "^3.3.0-dev.3",
    "@nuxt/devtools": "^1.0.0-beta.2",
    "@nuxtjs/device": "^3.1.1",
    "@nuxtjs/i18n": "^8.0.0-rc.5",
    "eslint": "^8.29.0",
    "husky": "^8.0.0",
    "jsdom": "^21.1.1",
    "nuxt": "3.7.4",
    "vitest": "^0.29.7"
  },
  "dependencies": {
    "@glen/manager": "^3.0.0-rc.0",
    "@glen/handler": "^1.3.6",
    "@glen/extension": "^3.3.0-dev.3",
    "@pinia/nuxt": "^0.4.6",
    "@vee-validate/rules": "^4.11.3",
    "@vue/apollo-composable": "^4.0.0-beta.1",
    "@vue/eslint-config-typescript": "^11.0.2",
    "@vueuse/components": "^9.6.0",
    "@vueuse/core": "^9.6.0",
    "websocket": "^1.0.34"
  },
  "extensionPack": [
    "Vue.volar"
  ],
  "overrides": {
    "vue": "latest"
  }
}

修改后的预期结果

{
  "name": "@glen/web_trans",
  "version": "1.0.0",
  "scripts": {
    "build": "nuxt build",
    "dev": "nuxt dev",
    "generate": "nuxt generate",
    "prepare": "husky install"
  },
  "devDependencies": {
    "@glen/manager": "^3.0.0",
    "@glen/handler": "^1.3.6",
    "@glen/extension": "^3.3.0",
    "@nuxt/devtools": "^1.0.0-beta.2",
    "@nuxtjs/device": "^3.1.1",
    "@nuxtjs/i18n": "^8.0.0-rc.5",
    "eslint": "^8.29.0",
    "husky": "^8.0.0",
    "jsdom": "^21.1.1",
    "nuxt": "3.7.4",
    "vitest": "^0.29.7"
  },
  "dependencies": {
    "@glen/manager": "^3.0.0",
    "@glen/handler": "^1.3.6",
    "@glen/extension": "^3.3.0",
    "@pinia/nuxt": "^0.4.6",
    "@vee-validate/rules": "^4.11.3",
    "@vue/apollo-composable": "^4.0.0-beta.1",
    "@vue/eslint-config-typescript": "^11.0.2",
    "@vueuse/components": "^9.6.0",
    "@vueuse/core": "^9.6.0",
    "websocket": "^1.0.34"
  },
  "extensionPack": [
    "Vue.volar"
  ],
  "overrides": {
    "vue": "latest"
  }
}

解决方案

方法一:使用jq工具(推荐)

jq是专门处理JSON的工具,能精准且安全地修改JSON结构,不会破坏文件格式:

jq '
  (.dependencies, .devDependencies) |= 
    with_entries(
      if .key | startswith("@glen/") then
        .value |= sub(/-rc\.0|-dev\.3$/; "")
      else . end
    )
' package.json > temp.json && mv temp.json package.json

说明:

  • 同时处理dependencies和devDependencies两个字段下的依赖
  • 遍历每个依赖项,仅对包名以@glen/开头的条目进行版本修改
  • 用正则表达式替换掉版本号末尾的-rc.0或-dev.3标签
  • 先将结果写入临时文件,再替换原文件,避免直接修改导致的文件损坏

方法二:使用sed(备选方案)

如果环境中没有jq,可使用sed做文本替换(注意:此方法依赖package.json的格式规范,比如键值对的引号、空格格式固定):

sed -i.bak -E 's/("@glen\/[^"]+":\s*"[^"]+)-rc\.0"/\1"/; s/("@glen\/[^"]+":\s*"[^"]+)-dev\.3"/\1"/' package.json

说明:

  • -i.bak:修改原文件的同时创建后缀为.bak的备份文件
  • 两个正则表达式分别匹配@glen/前缀包的版本号,移除目标标签
  • 若package.json的格式有变动(如空格、换行不同),此方法可能失效,优先推荐jq方案

内容的提问来源于stack exchange,提问作者MacLeon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:00:54