Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/htmlhint/htmlhint-loader

A webpack loader for htmlhint
https://github.com/htmlhint/htmlhint-loader

htmlhint loader loader-plugin webpack webpack-loader webpack-plugin webpack4

Last synced: 2 months ago
JSON representation

A webpack loader for htmlhint

Awesome Lists containing this project

README

        




HTMLHint Loader


A Webpack loader for HTMLHint



Travis Build Status


Codecov


NPM count

MIT Licence

Chat


Chat


  How To UseContributingRoadmapWebsite

## Table of Contents

- **[Install](#install)**
- **[Usage](#usage)**
- **[Options](#options)**

## Install

```
npm install htmlhint-loader
```

## Usage

```javascript
module.exports = {
module: {
rules: [{
enforce: 'pre',
test: /\.html/,
loader: 'htmlhint-loader',
exclude: /node_modules/
}]
}
}
```

### Options

You can directly pass some [htmlhint rules](https://github.com/thedaviddias/HTMLHint/wiki/Rules) by

- Adding a query string to the loader for this loader usage only

```javascript
module.exports = {
module: {
rules: [{
enforce: 'pre',
test: /\.html/,
loader: 'htmlhint-loader?{tagname-lowercase: true}',
exclude: /node_modules/
}]
}
}
```

- Adding a `htmlhint` entry in your webpack loader options:

```javascript
module.exports = {
module: {
rules: [{
enforce: 'pre',
test: /\.html/,
loader: 'htmlhint-loader',
exclude: /node_modules/,
options: {
configFile: 'path/.htmlhintrc'
}
}]
}
}
```

#### `configFile`

A path to a json file containing the set of htmlhint rules you would like applied to this project. *By default all rules are turned off and it is up to you to enable them.*

Example file:
```javascript
{
"tagname-lowercase": true,
"attr-lowercase": true,
"attr-value-double-quotes": true
}
```

#### `formatter` (default: a function that pretty prints any warnings and errors)

The function is called with an array of messages direct for htmlhint and must return a string.

#### `emitAs` (default: `null`)

What to emit errors and warnings as. Set to `warning` to always emit errors as warnings and `error` to always emit warnings as errors. By default the plugin will auto detect whether to emit as a warning or an error.

#### `failOnError` (default `false`)

Whether to force webpack to fail the build on a htmlhint error

#### `failOnWarning` (default `false`)

Whether to force webpack to fail the build on a htmlhint warning

#### `customRules`

Any custom rules you would like added to htmlhint. Specify as an array like so:
```javascript
module.exports = {
module: {
rules: [{
enforce: 'pre',
test: /\.html/,
loader: 'htmlhint-loader',
exclude: /node_modules/,
options: {
customRules: [{
id: 'my-rule-name',
description: 'Example description',
init: function(parser, reporter) {
//see htmlhint docs / source for what to put here
}
}]
}
}]
}
}
```

#### `rulesDir`

You can add a path to a folder containing your custom rules.
See below for the format of the rule, it is not the same as HTMLHINT - you can pass a value to a rule.
```javascript
// webpack config
module.exports = {
module: {
rules: [{
enforce: 'pre',
test: /\.html/,
loader: 'htmlhint-loader',
exclude: /node_modules/,
options: {
rulesDir: path.join(__dirname, 'rules/'),
'my-new-rule': 'this is pass to the rule (option)'
}
}]
}
}
```

```javascript
// rules/myNewRule.js
const id = 'my-new-rule';

module.exports = {
id,
rule: function(HTMLHint, option /* = 'this is pass to the rule (option)' */) {
HTMLHint.addRule({
id,
description: 'my-new-rule',
init: () => {
//see htmlhint docs / source for what to put here
}
});
}
};
```

##### `outputReport` (default: `false`)
Write the output of the errors to a file, for example a checkstyle xml file for use for reporting on Jenkins CI

The `filePath` is relative to the webpack config: output.path
The use of [name] is supported when linting multiple files.
You can pass in a different formatter for the output file, if none is passed in the default/configured formatter will be used

```javascript
module.exports = {
module: {
rules: [{
enforce: 'pre',
test: /\.html/,
loader: 'htmlhint-loader',
exclude: /node_modules/,
options: {
outputReport: {
filePath: 'checkstyle-[name].xml',
formatter(messages) {
// convert messages to a string that will be written to the file
return messagesFormattedToString;
}
}
}
}]
}
}
```

## Licence

Project initially created by [@mattlewis](https://github.com/mattlewis92) and transferred to the [HTMLHint](https://github.com/htmlhint) organization.

Logo HTMLHint

[MIT License](./LICENSE)