Is there a way to alphabetize package.json without installing a package?

Npm

Npm Problem Overview


I've been working on lots of old npm packages that have their dependencies all out of order. They're shrinkwrapped packages, so updating dependencies is a bit of work (testing and verifying that the dependency changes didn't break anything), but I'm manually moving some dependencies from the devDependencies key to the dependencies key, and I don't want to do anything except alphabetize them before I commit. Rather than doing it manually, is there an easy way to programmatically alphabetize them with npm?

Npm Solutions


Solution 1 - Npm

The sort-package-json package sorts not only dependencies and devDependencies, but other keys as well. I know the original questions didn't ask about the other keys, but I think it's cool to have all keys sorted.

You can simply run:

npx sort-package-json

Example from the package page:

$ cd my-project

$ cat package.json
{
  "dependencies": {
    "sort-package-json": "1.0.0",
    "sort-object-keys": "1.0.0"
  },
  "version": "1.0.0",
  "name": "my-awesome-project"
}
 
$ npx sort-package-json
package.json is sorted!
 
$ cat package.json
{
  "name": "my-awesome-project",
  "version": "1.0.0",
  "dependencies": {
    "sort-object-keys": "1.0.0",
    "sort-package-json": "1.0.0"
  }
}

This does not remove the trailing newline like the npm-sort package mentioned by Wolfgang.

Multiple files
$ sort-package-json "my-package/package.json" "other-package/package.json"

$ sort-package-json "package.json" "packages/*/package.json"

Solution 2 - Npm

Just run npm remove --save anything or npm remove --save-dev whatever and npm will sort that section, without actually touching any of the content. Of course you should make sure that the package name you pass it (which can be anything, spam your keyboard) isn't in your package.json.

Solution 3 - Npm

In addition to martias answer, you can just run:

npx sort-package-json

This won't install it permanently. You need npm >5.2.

Solution 4 - Npm

I have found the npm-sort package, which seems to work quite well, with the minor niggle that it removes the trailing newline from the package.json file.

Solution 5 - Npm

If you're using WebStorm, just select the lines you want to sort and click Edit > Sort Lines.

But for VScode there is no internal solution, so use this plugin https://marketplace.visualstudio.com/items?itemName=ue.alphabetical-sorter

Solution 6 - Npm

You might also want to take a look at fixpack, a CLI to update your package.json following their (slightly) opinionated order. You can however add a .fixpackrc to define your own rules, the defaults are:

  • name first
  • description second
  • version third
  • author fourth
  • all other keys in alphabetical order
  • dependencies and devDependencies sorted alphabetically
  • newline at the end of the file

Solution 7 - Npm

in VS-code there's a good packagesorter ofr the whole json file..

there's also something out there called "sortier" which sorts more, and is awesome.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJo SpragueView Question on Stackoverflow
Solution 1 - NpmMatias KinnunenView Answer on Stackoverflow
Solution 2 - NpmkarlView Answer on Stackoverflow
Solution 3 - NpmJulianView Answer on Stackoverflow
Solution 4 - NpmWolfgangView Answer on Stackoverflow
Solution 5 - NpmazerafatiView Answer on Stackoverflow
Solution 6 - NpmPaul Razvan BergView Answer on Stackoverflow
Solution 7 - NpmKai GouthroView Answer on Stackoverflow