从命令行编辑package.json

时间:2014-08-15 15:24:50

标签: json node.js npm

我正在尝试从shell脚本中添加或编辑package.json中的变量。所以,如果我有这样的package.json:

{
  "name": "my-project",
  "description": "Project by @DerZyklop",
  "version": "0.0.0",
  ...

我想要一个像

这样的命令
npm config set foo bar

添加一个新字段,如

{
  "name": "my-project",
  "description": "Project by @DerZyklop",
  "foo": "bar",
  "version": "0.0.0",
  ...

...但遗憾的是npm config set只编辑了~/.npmrc而不是我的package.json。

5 个答案:

答案 0 :(得分:66)

package.json只是json个文件,因此您可以使用工具json。要安装它,请使用:

npm install -g json

然后您可以就地编辑文件。更多信息here

实施例

$ cat package.json
{
  "name": "my-project",
  "description": "Project by @DerZyklop",
  "version": "0.0.0"
}

$ json -I -f package.json -e 'this.foo="bar"'
json: updated "package.json" in-place

$ cat package.json
{
  "name": "my-project",
  "description": "Project by @DerZyklop",
  "version": "0.0.0",
  "foo": "bar"
}

答案 1 :(得分:6)

如果不想安装任何东西,也可以用一行脚本修改package.json

node -e "let pkg=require('./package.json'); pkg.homepage='${CI_PAGES_URL}'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));"

答案 2 :(得分:3)

还有一个用于执行此操作的npm软件包,名为instance_templatehttps://github.com/zeke/npe

npe

答案 3 :(得分:2)

如果您不想安装spongejson,也可以

echo "`jq '.foo="bar"' package.json`" > package.json

答案 4 :(得分:0)

您还可以像这样使用sponge(moreutils软件包):

jq '.foo="bar"' package.json | sponge package.json

带有环境变量:

jq --arg h "$HOMEPAGE" '.homepage=$h' package.json | sponge package.json