使用Bash工具在package.json中替换整行

3

我正在研究一个命令行,可以为Node.js项目安装所需的所有Node版本。

目前您可以执行以下操作:

sudo gen-web-app express

这将生成你开始使用expressjs开发所需的所有内容。

我现在正在进行中

sudo gen-web-app reactjs

除了我必须手动进入package.json并将启动脚本添加到文件中之外,一切都正常运行。 我知道可以使用BASH中的SED实现此功能,但我需要一点帮助使用sed。
这是该文件:
{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "nodemon": "^1.11.0",
    "path": "^0.12.7",
    "react": "^15.6.1",
    "webpack": "^3.1.0",
    "webpack-dev-server": "^2.5.1"
  }
}

我想替换下面的内容,但是我需要一点帮助 :)

"test": "echo \"Error: no test specified\" && exit 1"

使用

"start": "webpack-dev-server"

1
这是您可以使用 sed 执行的最基本任务。是否考虑查看其文档或快速教程?此外,如果可能的话,您应该避免使用 sed 并使用能够理解 JSON 格式的工具,例如 jq - Aaron
1
不要使用像 sed 这样不支持 JSON 语法的解析器,而是使用专门用于 JSON 解析的 jq。你能下载并安装 jq 吗? - Inian
3个回答

4

下载并安装jq - 这是一款命令行的JSON语法解析器,可以帮助您修改.json文件。针对您提出的问题,这是一个很好的例子。

tmp=$(mktemp)    
jq '.scripts.start = "webpack-dev-server" | del(.scripts.test)' input.json > "$tmp" && mv "$tmp" input.json

将生成最终的.json文件,格式如下:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack-dev-server"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "nodemon": "^1.11.0",
    "path": "^0.12.7",
    "react": "^15.6.1",
    "webpack": "^3.1.0",
    "webpack-dev-server": "^2.5.1"
  }
}

您可以在jqplay.org开发的免费游乐场中使用 jq 进行操作。

1
谢谢回答,我会研究一下JQ的 :) ! - Laurens Mäkel

3
$ sed -ie 's/\"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"/\"start\": \"webpack-dev-server\"/g' file
$ cat file
{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack-dev-server"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "nodemon": "^1.11.0",
    "path": "^0.12.7",
    "react": "^15.6.1",
    "webpack": "^3.1.0",
    "webpack-dev-server": "^2.5.1"
  }
}

0

使用jq的另一个选项是简单地覆盖.scripts的值:

jq '.scripts = { start: "webpack-dev-server" }' file.json

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接