It’s quite common to make a mistake while developing your webpack configuration. A simple typo can cost you hours of development time. With webpack-validator, you can save yourself a ton of time by validating that your webpack configuration is free of common mistakes.
Note: Webpack 2 now has validation baked in.
There's an error in this config file. Go ahead and take a look and see if you can figure out what it is. If we run our build, we're going to get an error that is all together helpful. We simply get, "You're going to need a loader to handle this type of file." It's not helpful what the actual problem is. It looks like it's having a hard time loading CSS.
If we look in our config, we can see, no. We have loader specified. What the problem is, is we have this modules which actually should simply be module. If we run the build again, then everything is going to work out just fine.
It can be really frustrating to have these kinds of issues. Typos are common. There's a tool called webpack-validator that we can use to validate our configuration to ensure that there aren't any typos like this, and give us a little bit more of a helpful error message.
Let me go ahead and add that mistake back in there. We'll save that. We're going to go ahead and run npm-install --save-dev webpack-validator. It's notable that webpack-validator actually does a lot more than just typo checking. It will ensure that the types that you're providing are correct and a myriad of other things specific to your webpack configuration that are useful. I definitely recommend that you use it.
Now with that installed, we can go to our package.json, and we'll see that webpack-validator has been installed in our project. We're going to make a validate webpack script. Here, we'll do two versions, because there are actually two versions of our build, the dev build and the production build. If we run validate webpack:dev, we're going to use the webpack-validator binary that has been installed for us.
Then, we'll specify our config, so webpack.config.js. Then, to make sure that we're simulating the same environment that our regular build, our development build environment is experiencing, we add the --env.dev.
That will run our webpack config with that proper environment set. We'll be getting the webpack configuration for development. If we save that and run npm run validate webpack:dev, then we're going to get this handy error, "Modules is not allowed." That gives us exactly the place where we have the problem. We can go look up in the docs and find out that modules should actually be module.
Let's go ahead and add another one of these, one for production. Then, we can run the prod version to make sure that we're getting the same error there. Finally, we want to add these validations to our validate script which we currently have running as a pre-commit hook.
We'll go ahead and use npm run all, their API, which we simply can say the name of the script to validate webpack:* and that will run all of the validate webpack: scripts that we have. Now, if we run npm run validate, we're going to get that error twice, once for each validator.
Let's go ahead and fix this problem, change this back to module. Then, if we run validate script again, we're going to get that the config is valid, because this is the validate script that's also going to run our test and linting. Now, everything has passed just fine.
In review, all that we need to do to add webpack-validator is install it as a dependency. Then, we can use the webpack-validator CLI that it comes shipped with to validate our webpack config, providing the same environment that's used for our build and prod builds of our library over our application in this case.
It's notable that there's also a node interface to webpack-validator where you can require webpack-validator, and then we could simply wrap our configuration inside of this. Because we're using the CLI already, I'll get rid of all this. That's how you use webpack-validator with webpack 2.