node package manager


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,
        version: function (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