Opinionated package.json validator


Opinionated package.json validator

You can read the description of each package.json property here. Example package.json that passes all checks (because it is using this module!) is kensho/ng-describe/package.json.

npm install grunt-nice-package --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

  'nice-package': {
    all: {
      options: {
        // make sure package.json ends with \n\n, default false 
        blankLine: true|false,
        versionfunction (value) {
          // strict version number validation 
          return (/\d{1,2}\.\d{1,2}\.\d{1,2}/).test(value);

You can load the task with default options without specifying the configuration object

grunt.registerTask('default', ['nice-package']);

Note: you can use nicePackage as alias to nice-package task name

   nicePackage: {
     all: { ... }

If you don't want to use grunt, but still need this project, run it via grunty

npm install -D grunt-nice-package grunty

Then add the following to the scripts section

  "scripts": {
    "nice": "grunty grunt-nice-package nice-package"

Please return true if the check passes from custom validation functions.

After the property validators pass, package.json is further checked using package-json-validator by Nick Sullivan. It will check the required properties, and provide suggestions for the recommended ones.

The fix step in this task removes all fuzzy symbols from declared versions (~, ^), leaving just the numbers.

"dependencies": {         "dependencies": {
  "foo": "^0.1.0",  ==>     "foo": "0.1.0",
  "bar": "~1.0.0"           "bar": "1.0.0"
}                         }

You can define a validation function for any property of the package.json, by default the validation will check:

  • name
  • version
  • description
  • license or licenses
  • keywords (array of strings)

For complete list see nice_package.js for details.

You can easily run this grunt task from gulp, see Using grunt tasks from gulp

Author: Gleb Bahmutov © 2013

License: MIT - do anything with the code, but don't blame me if it does not work.

Spread the word: tweet, star on github, etc.

Support: if you find any problems with this module, email / tweet / open issue on Github