Edit package.json from command line

前端 未结 5 427
北恋
北恋 2021-01-30 01:19

I\'m trying to add or edit a variable in my package.json from a shell script. So if i have a package.json like this:

{
  \"name\": \"my-project\",
  \"descripti         


        
相关标签:
5条回答
  • 2021-01-30 02:03

    The package.json is just a json file, so you could use the tool json. To install it use:

    npm install -g json
    

    Then you can edit a file in-place. More information here.

    Example

    $ 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"
    }
    
    0 讨论(0)
  • 2021-01-30 02:09

    If you don't want to install sponge or json, you can also do

    echo "`jq '.foo="bar"' package.json`" > package.json
    
    0 讨论(0)
  • 2021-01-30 02:19

    You can also use jq and sponge (moreutils package) like this :

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

    With an environment variable :

    jq --arg h "$HOMEPAGE" '.homepage=$h' package.json | sponge package.json
    
    0 讨论(0)
  • 2021-01-30 02:25

    There's also a npm package for doing this called npe: https://github.com/zeke/npe

    cd some/node/project
    
    # Get stuff from package.json
    npe name
    npe scripts
    npe scripts.test
    npe repository.url
    open $(npe repository.url)
    
    # Set stuff in package.json
    npe name foo
    npe scripts.start "node index.js"
    
    # Keywords string will be turned into an array
    # If commas are present, they'll be the delimiter. Otherwise spaces.
    npe keywords "foo, bar, cheese whiz"
    npe keywords "foo bar baz"
    
    # The current working directory's package.json is used by default,
    # but you can point to another package file with a flag:
    npe name --package=some/other/package.json
    npe name other --package=some/other/package.json
    
    0 讨论(0)
  • 2021-01-30 02:26

    If you don't want to install anything, you can also use a one-line script to modify the package.json:

    node -e "let pkg=require('./package.json'); pkg.homepage='${CI_PAGES_URL}'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));"
    
    0 讨论(0)
提交回复
热议问题