@rogerpence/edit-package-json v1.1.1
NPM package: edit-package-json
edit-package-json is an NPM package that makes changes to package.json files. It can be used on the command line (as editPackageJson) or from within a Node app.
edit-package-json's primary purpose is to add scripts keys and values to create scriptable installs. For example, during a scripted install of Tailwind, you might want to add a script option or two for compiling Tailwind.
NPM user COLEWW posted a package named
npm-add-scriptto NPM in 2016 or so. That project has since been archived as read-only on GitHub. I used some of COLEWW's code (especially his example for using theyargspackage) in this package.
Installation
Install edit-package-json either locally:
npm install --save-dev @rogerpence/edit-package-jsonor globally:
npm install -g @rogerpence/edit-package-jsonCommand line syntax
The command line syntax is:
npx editpackagejson <options>where options are:
| Option | Shortcut | Description | Required |
|---|---|---|---|
| --parent | -p | parent element name name | no, defaults to 'scripts' |
| --key | -k | key name | yes |
| --value | -v | key value | yes |
| --force | -f | force update | no, defaults to false |
| --help | -h | show help |
If you attempt to update an existing value, the operation fails with an exception, unless you specific -f or --force.
See the note below about using embedded blanks in the --value option.
Because edit-package-json is intended primarily to add scripts values the default parent element is scripts.
Example:
package.json before:
"scripts": {
"test": "mocha",
}Run editpackagejson
$ npx editpackagejson -k "dev:tw" -v "postcss..."causes dev:key and its value have been added to the scripts element.
"scripts": {
"test": "mocha",
"dev:tw": "postcss..."
}Calling editPackageJson in Node.js
Pass a JavaScript object with the necessary option names (omitting the leading dashes):
const editPackageJson = require('@rogerpence/edit-package-json');
const args = {
key: 'shakey',
value: 'cross-env NODE_ENV=dev ...',
force: true
}
editPackageJson(args)Key values with embedded blanks on the command line
Arguments passed on the command with embedded blanks cause command processors trouble. Use the guide below for platform-specific ways to delimit values with embedded blanks... or let edit-package-json do the hard work by using a plus sign (+) anywhere you a want a blank. For example, this:
npx editpackagejson -k "dev:tw" -v "cross-env+NODE_ENV=dev+mycommand"resolves to this value in the package.json scripts.dev:tw value:
cross-env NODE_ENV=dev mycommandIt's probably easiest to use the plus sign feature and get on with your life. However, if you rather do it the hard way, use the guide below:
PowerShell
Use '"" and ""' to delimit the value:
npx editpackagejson -k "dev:tw" -v '""cross-env NODE_ENV=dev mycommand""'However, in PowerShell if you'd like build a key value with PowerShell's string interpolation, you need to use this convoluted syntax:
$value = "'`"`"important stuff with ./$($devDirectory)/css/`"`"'"to cause PowerShell to pass the correct value to edit-package-json. This error-prone convolution was the inspiration for adding the plus sign (+) feature.
DOS command prompt and Bash command line:
Use "\" and "\" to delimit the value:
npx editpackagejson -k "dev:tw" -v "\"cross-env NODE_ENV=dev mycommand"\"