如何使用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
相关产品推荐
相关产品推荐

