UNPKG

11.6 kBMarkdownView Raw
1# grunt-check-pages
2
3> Grunt task that checks various aspects of a web page for correctness.
4
5[![npm version][npm-image]][npm-url]
6[![GitHub tag][github-tag-image]][github-tag-url]
7[![Build status][travis-image]][travis-url]
8[![Coverage][coveralls-image]][coveralls-url]
9[![License][license-image]][license-url]
10
11
12## Getting Started
13
14This plugin requires Grunt `~0.4.4`.
15
16If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
17
18```shell
19npm install grunt-check-pages --save-dev
20```
21
22Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
23
24```js
25grunt.loadNpmTasks('grunt-check-pages');
26```
27
28(*For similar functionality without a Grunt dependency, please see the [`check-pages`](https://www.npmjs.com/package/check-pages) package.*)
29
30
31## The "checkPages" task
32
33
34### Overview
35
36An important aspect of creating a web site is validating the structure, content, and configuration of the site's pages. The `checkPages` task provides an easy way to integrate this testing into your normal Grunt workflow.
37
38By providing a list of pages to scan, the task can:
39
40* Validate each page is accessible
41* Validate all links point to accessible content (similar to the [W3C Link Checker](http://validator.w3.org/checklink))
42* Validate links with query string [file hashes](http://en.wikipedia.org/wiki/List_of_hash_functions) have the expected content
43* Validate page structure for XHTML compliance (akin to the [W3C Markup Validation Service](http://validator.w3.org/))
44* Validate a page's response time is below some threshold
45* Validate a page takes advantage of [caching for better performance](https://developers.google.com/speed/docs/insights/LeverageBrowserCaching)
46* Validate a page takes advantage of [compression for better performance](https://developers.google.com/speed/docs/insights/EnableCompression)
47
48
49### Usage
50
51In your project's Gruntfile, add a section named `checkPages` to the data object passed into `grunt.initConfig()`.
52The following example includes all supported options:
53
54```js
55grunt.initConfig({
56 checkPages: {
57 development: {
58 options: {
59 pageUrls: [
60 'http://localhost:8080/',
61 'http://localhost:8080/blog',
62 'http://localhost:8080/about.html'
63 ],
64 checkLinks: true,
65 onlySameDomain: true,
66 queryHashes: true,
67 noRedirects: true,
68 noLocalLinks: true,
69 noEmptyFragments: true,
70 linksToIgnore: [
71 'http://localhost:8080/broken.html'
72 ],
73 checkXhtml: true,
74 checkCaching: true,
75 checkCompression: true,
76 maxResponseTime: 200,
77 userAgent: 'custom-user-agent/1.2.3',
78 summary: true
79 }
80 },
81 production: {
82 options: {
83 pageUrls: [
84 'http://example.com/',
85 'http://example.com/blog',
86 'http://example.com/about.html'
87 ],
88 checkLinks: true,
89 maxResponseTime: 500
90 }
91 }
92 }
93});
94```
95
96
97### Options
98
99#### pageUrls
100
101Type: `Array` of `String`
102Default value: `undefined`
103*Required*
104
105`pageUrls` specifies a list of URLs for web pages the task will check.
106
107URLs must be absolute and can point to local or remote content. The `pageUrls` array can be empty, but must be present.
108
109To store the list outside `Gruntfile.js`, read the array from a JSON file instead: `pageUrls: grunt.file.readJSON('pageUrls.json')`.
110
111#### checkLinks
112
113Type: `Boolean`
114Default value: `false`
115
116Enabling `checkLinks` causes each link in a page to be checked for validity (i.e., an [HTTP HEAD or GET request](http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods) returns success).
117
118For efficiency, a `HEAD` request is made first and a successful result validates the link. Because some web servers misbehave, a failed `HEAD` request is followed by a `GET` request to definitively validate the link.
119
120The following element/attribute pairs are used to identify links:
121
122* `a`/`href`
123* `area`/`href`
124* `audio`/`src`
125* `embed`/`src`
126* `iframe`/`src`
127* `img`/`src`
128* `input`/`src`
129* `link`/`href`
130* `object`/`data`
131* `script`/`src`
132* `source`/`src`
133* `track`/`src`
134* `video`/`src`
135
136#### onlySameDomain
137
138Type: `Boolean`
139Default value: `false`
140Used by: `checkLinks`
141
142Set this option to `true` to block the checking of links on different domains than the referring page.
143
144This can be useful during development when external sites aren't changing and don't need to be checked.
145
146#### queryHashes
147
148Type: `Boolean`
149Default value: `false`
150Used by: `checkLinks`
151
152Set this option to `true` to verify links with [file hashes](http://en.wikipedia.org/wiki/List_of_hash_functions) in the query string point to content that hashes to the expected value.
153
154Query hashes can be used to [invalidate cached responses](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching#invalidating-and-updating-cached-responses) when [leveraging browser caching](https://developers.google.com/speed/docs/insights/LeverageBrowserCaching) via long cache lifetimes.
155
156Supported hash functions are:
157
158* image.png?[crc32](http://en.wikipedia.org/wiki/Cyclic_redundancy_check)=e4f013b5
159* styles.css?[md5](http://en.wikipedia.org/wiki/MD5)=4f47458e34bc855a46349c1335f58cc3
160* archive.zip?[sha1](http://en.wikipedia.org/wiki/SHA-1)=9511fa1a787d021bdf3aa9538029a44209fb5c4c
161
162#### noRedirects
163
164Type: `Boolean`
165Default value: `false`
166Used by: `checkLinks`
167
168Set this option to `true` to fail the task if any [HTTP redirects](http://en.wikipedia.org/wiki/URL_redirection) are encountered.
169
170This can be useful to ensure outgoing links are to the content's canonical location.
171
172#### noLocalLinks
173
174Type: `Boolean`
175Default value: `false`
176Used by: `checkLinks`
177
178Set this option to `true` to fail the task if any links to [`localhost`](http://en.wikipedia.org/wiki/Localhost) are encountered.
179
180This is useful to detect temporary links that may work during development but would fail when deployed.
181
182The list of host names recognized as `localhost` are:
183
184* localhost
185* 127.0.0.1 (and the rest of the `127.0.0.0/8` address block)
186* ::1 (and its expanded forms)
187
188#### noEmptyFragments
189
190Type: `Boolean`
191Default value: `false`
192Used by: `checkLinks`
193
194Set this option to `true` to fail the task if any links contain an empty [fragment identifier (hash)](http://en.wikipedia.org/wiki/Fragment_identifier) such as `<a href="#">`.
195
196This is useful to identify placeholder links that haven't been updated.
197
198#### linksToIgnore
199
200Type: `Array` of `String`
201Default value: `undefined`
202Used by: `checkLinks`
203
204`linksToIgnore` specifies a list of URLs that should be ignored by the link checker.
205
206This is useful for links that are not accessible during development or known to be unreliable.
207
208#### checkXhtml
209
210Type: `Boolean`
211Default value: `false`
212
213Enabling `checkXhtml` attempts to parse each URL's content as [XHTML](http://en.wikipedia.org/wiki/XHTML) and fails if there are any structural errors.
214
215This can be useful to ensure a page's structure is well-formed and unambiguous for browsers.
216
217#### checkCaching
218
219Type: `Boolean`
220Default value: `false`
221
222Enabling `checkCaching` verifies the HTTP [`Cache-Control`](https://tools.ietf.org/html/rfc2616#section-14.9) and [`ETag`](https://tools.ietf.org/html/rfc2616#section-14.19) response headers are present and valid.
223
224This is useful to ensure a page makes use of browser caching for better performance.
225
226#### checkCompression
227
228Type: `Boolean`
229Default value: `false`
230
231Enabling `checkCompression` verifies the HTTP [`Content-Encoding`](https://tools.ietf.org/html/rfc2616#section-14.11) response header is present and valid.
232
233This is useful to ensure a page makes use of compression for better performance.
234
235#### maxResponseTime
236
237Type: `Number`
238Default value: `undefined`
239
240`maxResponseTime` specifies the maximum amount of time (in milliseconds) a page request can take to finish downloading.
241
242Requests that take more time will trigger a failure (but are still checked for other issues).
243
244#### userAgent
245
246Type: `String`
247Default value: `grunt-check-pages/x.y.z`
248
249`userAgent` specifies the value of the HTTP [`User-Agent`](https://tools.ietf.org/html/rfc2616#section-14.43) header sent with all page/link requests.
250
251This is useful for pages that alter their behavior based on the user agent. Setting the value `null` omits the `User-Agent` header entirely.
252
253#### summary
254
255Type: `Boolean`
256Default value: `false`
257
258Enabling the `summary` option logs a summary of each issue found after all checks have completed.
259
260This makes it easy to pick out failures when running tests against many pages.
261
262
263## Release History
264
265* 0.1.0 - Initial release, support for `checkLinks` and `checkXhtml`.
266* 0.1.1 - Tweak README for better formatting.
267* 0.1.2 - Support page-only mode (no link or XHTML checks), show response time for requests.
268* 0.1.3 - Support `maxResponseTime` option, buffer all page responses, add "no-cache" header to requests.
269* 0.1.4 - Support `checkCaching` and `checkCompression` options, improve error handling, use [`gruntMock`](https://www.npmjs.com/package/gruntmock).
270* 0.1.5 - Support `userAgent` option, weak entity tags, update `nock` dependency.
271* 0.2.0 - Support `noLocalLinks` option, rename `disallowRedirect` option to `noRedirects`, switch to [`ESLint`](http://eslint.org/), update `superagent` and `nock` dependencies.
272* 0.3.0 - Support `queryHashes` option for CRC-32/MD5/SHA-1, update `superagent` dependency.
273* 0.4.0 - Rename `onlySameDomainLinks` option to `onlySameDomain`, fix handling of redirected page links, use page order for links, update all dependencies.
274* 0.5.0 - Show location of redirected links with `noRedirects` option, switch to `crc-hash` dependency.
275* 0.6.0 - Support `summary` option, update `crc-hash`, `grunt-eslint`, `nock` dependencies.
276* 0.6.1 - Add badges for automated build and coverage info to README (along with npm, GitHub, and license).
277* 0.6.2 - Switch from `superagent` to `request`, update `grunt-eslint` and `nock` dependencies.
278* 0.7.0 - Move task implementation into reusable `check-pages` package.
279* 0.7.1 - Fix misreporting of "Bad link" for redirected links when noRedirects enabled.
280* 0.8.0 - Suppress redundant link checks, support `noEmptyFragments` option, update dependencies.
281
282
283[npm-image]: https://img.shields.io/npm/v/grunt-check-pages.svg
284[npm-url]: https://www.npmjs.com/package/grunt-check-pages
285[github-tag-image]: https://img.shields.io/github/tag/DavidAnson/grunt-check-pages.svg
286[github-tag-url]: https://github.com/DavidAnson/grunt-check-pages
287[travis-image]: https://img.shields.io/travis/DavidAnson/grunt-check-pages.svg
288[travis-url]: https://travis-ci.org/DavidAnson/grunt-check-pages
289[coveralls-image]: https://img.shields.io/coveralls/DavidAnson/grunt-check-pages.svg
290[coveralls-url]: https://coveralls.io/r/DavidAnson/grunt-check-pages
291[license-image]: https://img.shields.io/npm/l/grunt-check-pages.svg
292[license-url]: http://opensource.org/licenses/MIT