July 03, 2017
In the previous post about automating deployments with Travis I noted that it’s a good idea to lint your code before deploying it. In past react projects I’ve started with the react-redux-starter-kit which comes preconfigured to use eslint with the Standard JS package. We need linting for this blog, so let’s copy what the starter-kit is doing.
Probably the easiest way to grab our files is using wget. You might need to install wget on your system. You can always manually pull down these files.
From the root of the blog, run these commands:
wget https://raw.githubusercontent.com/davezuko/react-redux-starter-kit/master/.editorconfig
wget https://raw.githubusercontent.com/davezuko/react-redux-starter-kit/master/.eslintignore
wget https://raw.githubusercontent.com/davezuko/react-redux-starter-kit/master/.eslintrc
We need to make sure we ignore the public folder.
echo "public/**" >> .eslintignore
We need to install eslint for our project. We can also remove gh-pages from our project since we’re not hosting our blog on Github pages.
yarn add --dev babel-eslint \
eslint \
eslint-config-standard \
eslint-config-standard-react \
eslint-plugin-babel \
eslint-plugin-import \
eslint-plugin-node \
eslint-plugin-promise \
eslint-plugin-react \
eslint-plugin-standard
yarn remove gh-pages
Gatsby adds a lint script to your packages.json but it’s not exactly what we need. We’re going to rely instead on the .eslintrc that we downloaded from the starter-kit. This means that we can simplify the lint command. We’ll also add the lint:fix from the starter-kit.
{
"scripts": {
"lint": "eslint .",
"lint:fix": "yarn lint -- --fix",
"test": "echo \"Warning: no test specified\" && exit 0",
}
}
At this point we can run our linter. If you are using an editor like Atom you should install the eslint package to see linting errors in your editor. This is preferred to using an eslint watch option.
# this should show some errors
yarn lint
# this should fix most errors
yarn lint:fix
We can require the project to pass our linter before we will deploy it. All we need to do is call lint from our script block in our .travis.yml file.
# make your .travis.yml script section look more like this
script:
- "yarn lint"
- "yarn test"
- "yarn build:prod"
If you have already run yarn lint:fix there should be very few errors.
These are the errors I had to fix:
/project/path/blog/components/Bio.js
26:1 error Line 26 exceeds the maximum line length of 120 max-len
/project/path/blog/html.js
20:55 error Unexpected '!' in '!raw!./public/styles.css'. Do not use import syntax to configure webpack loaders import/no-webpack-loader-syntax
/project/path/blog/pages/_template.js
71:10 error 'route' PropType is defined but prop is never used react/no-unused-prop-types
/project/path/blog/pages/index.js
18:38 error Unexpected mix of '&&' and '||' no-mixed-operators
18:69 error Unexpected mix of '&&' and '||' no-mixed-operators
Once you are able to run yarn lint on your local, try committing your files and seeing if Travis can build your project. From now on your project will need to pass the linter before it can be deployed.