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

如何使用jq更新JSON对象 为package.json的scripts新增命令

jq追加package.json脚本配置方案

背景

Web开发场景下我们使用package.json管理项目配置,文件内的scripts对象用于存放各类执行命令,以下是使用jq工具自动向scripts对象追加新命令配置的具体操作方法。

原始package.json内容

{
  "name": "test-project",
  "version": "1.0.0",
  "description": "A Vue.js project",
  "main": "src/main.js",
  "private": true,
  "scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "unit": "jest --config test/unit/jest.conf.js --coverage",
    "test": "npm run unit",
    "lint": "eslint --ext .js,.vue src test/unit",
    "build": "node build/build.js"
  },
  "dependencies": {
    "vue": "^2.5.2"
  }
}

待新增的脚本项

"prettier": "prettier --fix"
"eslint": "eslint run --all"
"foo": "bar"

具体操作命令

jq的+=操作符可以实现对象的增量合并,不会丢失原有scripts下的配置,若新增的key和原有key重名,新值会覆盖旧值,符合常规配置更新逻辑。

  • 仅在终端打印修改后的结果,不改动原文件:
jq '.scripts += {
  "prettier": "prettier --fix",
  "eslint": "eslint run --all",
  "foo": "bar"
}' package.json
  • 直接原地修改原package.json文件(jq 1.6及以上版本支持):
jq -i '.scripts += {
  "prettier": "prettier --fix",
  "eslint": "eslint run --all",
  "foo": "bar"
}' package.json
  • 低版本jq兼容写法(借助sponge工具,避免写入时清空原文件):
jq '.scripts += {
  "prettier": "prettier --fix",
  "eslint": "eslint run --all",
  "foo": "bar"
}' package.json | sponge package.json

修改后效果

修改完成后scripts节点内容如下,原有配置全部保留,新增项正常追加:

"scripts": {
  "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
  "start": "npm run dev",
  "unit": "jest --config test/unit/jest.conf.js --coverage",
  "test": "npm run unit",
  "lint": "eslint --ext .js,.vue src test/unit",
  "build": "node build/build.js",
  "prettier": "prettier --fix",
  "eslint": "eslint run --all",
  "foo": "bar"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:27:29