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:
grunt.loadNpmTasks('grunt-nice-package');
grunt.initConfig({
'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.loadNpmTasks('grunt-nice-package');
grunt.registerTask('default', ['nice-package']);
Note: you can use nicePackage as alias to nice-package task name
grunt.initConfig({
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