Awesome
grunt-nice-package
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.
Install
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);
}
}
}
}
});
Alternative: default options
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: { ... }
}
});
Install without Grunt
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"
}
}
Validator functions
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.
Tight versions
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"
} }
Options
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.
Related projects
You can easily run this grunt task from gulp, see Using grunt tasks from gulp
Small print
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