Grunt plugin for starting the vnu.jar markup checker in server mode. Plays well with grunt-html-dev for faster HTML validation by only starting vnu.jar once, as startup can take a few seconds.
This fork publishes a new grunt-vnuserver-dev
NPM module, which depends on vnu-jar@next
instead of the latest release of vnu-jar
. The W3C Markup Validation Service uses the development version of vnu-jar
too. If you want to get consistent results from on-line and off-line testing, you should use grunt-vnuserver-dev
instead of grunt-vnuserver
in your project.
Install this grunt plugin next to your project's Gruntfile.js with:
npm install grunt-vnuserver-dev --save-dev
Then add this line to your project's Gruntfile.js
:
grunt.loadNpmTasks('grunt-vnuserver-dev');
- Type:
Number
- Default: 8888
The port on which to start the server.
all: {
options: {
port: 8877
},
}
- Type:
Boolean
- Default:
false
Whether or not to skip server startup if port is already in use.
Task will fail if port is in use and skippable
and useAvailablePort
are false.
- Type:
Boolean
- Default:
false
Whether or not to keep the vnu server running even after grunt exists. If false, vnu server is killed when grunt exists.
- Type:
Boolean
- Default:
false
If true
the task will look for the next available port, if the port
set by the port
option is in use.
Consider the following configuration in Gruntfile.js in which the watch
task is set to run htmllint
every time the source file changes.
By starting the validator in server mode once using the vnuserver
task, validations by htmllint
can be performed much faster by simply connecting to this already-running server.
module.exports = function (grunt) {
grunt.initConfig({
vnuserver: {
},
htmllint: {
all: {
options: {
// This option makes grunt-html-dev connect to the vnu server instance.
server: {}
},
src: "app.html"
}
},
watch: {
all: {
tasks: ['htmllint'],
files: "app.html"
}
},
});
grunt.loadNpmTasks('grunt-vnuserver-dev');
grunt.loadNpmTasks('grunt-html-dev');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('default', ['vnuserver', 'watch']);
};
If you set useAvailablePort
to true
, you will need to pass the actual value to the htmllint
task, but the value will be known first during the runtime. Use a function for the server
option, which was introduced in the grunt-html-dev fork, at first.
module.exports = function (grunt) {
var vnuPort;
grunt.initConfig({
vnuserver: {
// Name the task to be able to listen to its events.
options: {
// Start with the first free ephemeral port.
port: 49152,
// Try other ports, up to port + 30, if the first one is not free.
useAvailablePort: true
}
},
htmllint: {
options: {
// Connect to the vnu server on the dynamically chosen port.
server: function () {
return {
port: vnuPort
};
}
},
all: {
src: "app.html"
}
},
watch: {
all: {
tasks: ['htmllint'],
files: "app.html"
}
},
});
grunt.loadNpmTasks('grunt-vnuserver-dev');
grunt.loadNpmTasks('grunt-html-dev');
grunt.loadNpmTasks('grunt-contrib-watch');
// Obtain the port, which the vnu server is listening to.
grunt.event.on('vnuserver.listening', function (port) {
vnuPort = port;
// vnuPort = grunt.config.get('vnuserver.options.port');
});
grunt.registerTask('default', ['vnuserver', 'watch']);
};
Copyright Bennie Swart. Licensed under the MIT license.