1 changed files with 208 additions and 0 deletions
@ -0,0 +1,208 @@ |
|||
# Neutrino Airbnb Preset [![NPM version][npm-image]][npm-url] |
|||
|
|||
`neutrino-preset-airbnb-base` is a Neutrino preset that supports linting JavaScript projects with Airbnb's base ESLint |
|||
config, following the [Airbnb styleguide](https://github.com/airbnb/javascript). |
|||
|
|||
## Features |
|||
|
|||
- Zero upfront configuration necessary to start linting your project |
|||
- Modern Babel knowledge supporting ES modules, JSX (when used with React preset), Web and Node.js apps |
|||
- Highly visible during development, fails compilation when building for production |
|||
- Easily extensible to customize your project as needed |
|||
|
|||
## Requirements |
|||
|
|||
- Node.js v6.9+ |
|||
- Yarn or npm client |
|||
- Neutrino v4, Neutrino build preset |
|||
|
|||
## Installation |
|||
|
|||
`neutrino-preset-airbnb-base` can be installed via the Yarn or npm clients. Inside your project, make sure |
|||
`neutrino` and `neutrino-preset-airbnb-base` are development dependencies. You will also be using |
|||
another Neutrino preset for building your application source code. |
|||
|
|||
#### Yarn |
|||
|
|||
```bash |
|||
❯ yarn add --dev neutrino-preset-airbnb-base |
|||
``` |
|||
|
|||
#### npm |
|||
|
|||
```bash |
|||
❯ npm install --save-dev neutrino-preset-airbnb-base |
|||
``` |
|||
|
|||
## Project Layout |
|||
|
|||
`neutrino-preset-airbnb-base` follows the standard [project layout](/project-layout.md) specified by Neutrino. This |
|||
means that by default all project source code should live in a directory named `src` in the root of the |
|||
project. |
|||
|
|||
## Quickstart |
|||
|
|||
After adding the Airbnb preset to your Neutrino-built project, edit your project's package.json to add the preset for |
|||
linting **before** your build preset. For example, if you are building your project using `neutrino-preset-web`: |
|||
|
|||
```json |
|||
{ |
|||
"scripts": { |
|||
"start": "neutrino start --presets neutrino-preset-airbnb-base neutrino-preset-web", |
|||
"build": "neutrino build --presets neutrino-preset-airbnb-base neutrino-preset-web" |
|||
} |
|||
} |
|||
``` |
|||
|
|||
Start the app, then check your console for any linting errors. If everything is successful, you should see no errors in |
|||
the console. ESLint errors visible during development are reported, but will still continue to build and serve your |
|||
project. |
|||
|
|||
#### Yarn |
|||
|
|||
```bash |
|||
❯ yarn start |
|||
✔ Development server running on: http://localhost:5000 |
|||
✔ Build completed |
|||
|
|||
ERROR in ./src/index.js |
|||
|
|||
/web/src/index.js |
|||
7:1 warning Unexpected console statement no-console |
|||
7:14 error A space is required after '{' babel/object-curly-spacing |
|||
7:20 error Missing space before value for key 'hello' key-spacing |
|||
7:27 error A space is required before '}' babel/object-curly-spacing |
|||
|
|||
✖ 4 problems (3 errors, 1 warning) |
|||
``` |
|||
|
|||
#### npm |
|||
|
|||
```bash |
|||
❯ npm start |
|||
|
|||
✔ Development server running on: http://localhost:5000 |
|||
✔ Build completed |
|||
|
|||
ERROR in ./src/index.js |
|||
|
|||
/web/src/index.js |
|||
7:1 warning Unexpected console statement no-console |
|||
7:14 error A space is required after '{' babel/object-curly-spacing |
|||
7:20 error Missing space before value for key 'hello' key-spacing |
|||
7:27 error A space is required before '}' babel/object-curly-spacing |
|||
|
|||
✖ 4 problems (3 errors, 1 warning) |
|||
``` |
|||
|
|||
## Building |
|||
|
|||
`neutrino-preset-airbnb-base` will cause errors to **fail your build** when creating a bundle via `neutrino build`. If |
|||
you want to ease introduction of this linting preset to your project, consider only adding it to your preset list for |
|||
`neutrino start` until all linting errors have been resolved. |
|||
|
|||
```bash |
|||
❯ yarn build |
|||
clean-webpack-plugin: /web/build has been removed. |
|||
Build completed in 1.287s |
|||
|
|||
./src/index.js |
|||
|
|||
/Users/eli/code/neutrino-examples/web/src/index.js |
|||
6:1 warning Unexpected console statement no-console |
|||
6:14 error A space is required after '{' babel/object-curly-spacing |
|||
6:16 error Missing space before value for key 'a' key-spacing |
|||
6:17 error A space is required before '}' babel/object-curly-spacing |
|||
|
|||
✖ 4 problems (3 errors, 1 warning) |
|||
|
|||
@ multi ./src/index.js |
|||
./src/index.js |
|||
Module build failed: Error: Module failed because of a eslint error. |
|||
|
|||
at lint (/Users/eli/code/neutrino-dev/packages/neutrino-preset-airbnb-base/node_modules/eslint-loader/index.js:115:17) |
|||
at Object.module.exports (/Users/eli/code/neutrino-dev/packages/neutrino-preset-airbnb-base/node_modules/eslint-loader/index.js:181:3) |
|||
@ multi ./src/index.js |
|||
error Command failed with exit code 1. |
|||
``` |
|||
|
|||
## Customizing |
|||
|
|||
To override the build configuration, start with the documentation on [customization](/customization/README.md). |
|||
`neutrino-preset-airbnb-base` creates some conventions to make overriding the configuration easier once you are ready to |
|||
make changes. |
|||
|
|||
### Rules |
|||
|
|||
The following is a list of rules and their identifiers which can be overridden: |
|||
|
|||
- `lint`: Lints JS and JSX files from the `src` directory using ESLint. Contains a single loader named `eslint`. |
|||
|
|||
### Simple customization |
|||
|
|||
By following the [customization guide](/customization/simple.md) and knowing the rule and loader IDs above, |
|||
you can override and augment the linting configuration directly from package.json. _Note: Using the simple customization |
|||
approach for linting changes can be verbose._ |
|||
|
|||
_Example: Turn off semicolons from being required as defined by the Airbnb rules._ |
|||
|
|||
```json |
|||
{ |
|||
"config": { |
|||
"neutrino": { |
|||
"module": { |
|||
"rule": { |
|||
"lint": { |
|||
"loader": { |
|||
"eslint": { |
|||
"options": { |
|||
"rules": { |
|||
"semi": "off" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
``` |
|||
|
|||
Again, using simple customization for linting can be verbose. Consider using advanced customization if it suits your |
|||
project. |
|||
|
|||
### Advanced configuration |
|||
|
|||
By following the [customization guide](/customization/advanced.md) and knowing the rule and loader IDs above, |
|||
you can override and augment the build by creating a JS module which overrides the config. |
|||
|
|||
_Example: Turn off semicolons from being required as defined by the Airbnb rules._ |
|||
|
|||
```js |
|||
const merge = require('deepmerge'); |
|||
|
|||
module.exports = neutrino => { |
|||
neutrino.config |
|||
.rule('lint') |
|||
.loader('eslint', ({ options }) => { |
|||
return { |
|||
options: merge(options, { |
|||
rules: { |
|||
semi: 'off' |
|||
} |
|||
}) |
|||
}; |
|||
}); |
|||
}; |
|||
``` |
|||
|
|||
## Contributing |
|||
|
|||
This preset is part of the [neutrino-dev](https://github.com/mozilla-neutrino/neutrino-dev) repository, a monorepo |
|||
containing all resources for developing Neutrino and its core presets. Follow the |
|||
[contributing guide](/contributing/README.md) for details. |
|||
|
|||
[npm-image]: https://badge.fury.io/js/neutrino-preset-airbnb-base.svg |
|||
[npm-url]: https://npmjs.org/package/neutrino-preset-airbnb-base |
Loading…
Reference in new issue