I've tried to cover some common issues here. This chapter will be expanded as common issues are found.
EPEERINVALID
#It is possible you may see a message like this:
npm WARN package.json kanban-app@0.0.0 No repository field.
npm WARN package.json kanban-app@0.0.0 No README data
npm WARN peerDependencies The peer dependency eslint@0.21 - 0.23 included from eslint-loader will no
npm WARN peerDependencies longer be automatically installed to fulfill the peerDependency
npm WARN peerDependencies in npm 3+. Your application will need to depend on it explicitly.
...
npm ERR! Darwin 14.3.0
npm ERR! argv "node" "/usr/local/bin/npm" "i"
npm ERR! node v0.10.38
npm ERR! npm v2.11.0
npm ERR! code EPEERINVALID
npm ERR! peerinvalid The package eslint does not satisfy its siblings' peerDependencies requirements!
npm ERR! peerinvalid Peer eslint-plugin-react@2.5.2 wants eslint@>=0.8.0
npm ERR! peerinvalid Peer eslint-loader@0.14.0 wants eslint@0.21 - 0.23
npm ERR! Please include the following file with any support request:
...
In human terms, it means that some package, eslint-loader
in this case, has a too strict peerDependency
requirement. Our project has a newer version installed already. Given the required peer dependency is older than our version, we get this particular error.
There are a couple of ways to work around this:
eslint
to version 0.23
("eslint": "0.23"
), and everyone should be happy."<package>": "<github user>/<project>#<reference>"
kind of declaration for your dependencies.Note that peer dependencies are dealt with differently starting from npm 3. After that version, it's up to the package consumer (i.e., you) to deal with it. This particular error will go away.
You might get this warning while using React. An easy way to end up getting it is to trigger setState()
within a method, such as render()
. Sometimes this can happen indirectly. One way to cause the warning is call a method instead of binding it. Example: <input onKeyPress={this.checkEnter()} />
. Assuming this.checkEnter
uses setState()
, this code will fail. Instead, you should use <input onKeyPress={this.checkEnter} />
as that will bind the method correctly without calling it.
You can get this warning through multiple means. Common causes below:
Module parse failed
#When using Webpack, an error like this might come up:
ERROR in ./app/components/Demo.jsx
Module parse failed: .../app/components/Demo.jsx Line 16: Unexpected token <
This means there is something preventing Webpack to interpret the file correctly. You should check out your loader
configuration carefully. Make sure the right loaders are applied to the right files. If you are using include
, you should verify that the file is included within include
paths.
Even though everything should work in theory, sometimes version ranges can bite you, despite SemVer. If some core package breaks, let's say babel
, and you happen to execute npm i
in an unfortunate time, you may end up with a project that doesn't compile.
A good first step is to execute npm update
. This will check out your dependencies and pull the newest matching versions into your SemVer declarations. If this doesn't fix the issue, you can try to nuke node_modules
(rm -rf node_modules
) from the project directory and reinstall the dependencies (npm i
). Alternatively you can try to explicitly pin some of your dependencies to specific versions.
Often you are not alone with your problem. Therefore, it may be worth your while to check out the project issue trackers to see what's going on. You can likely find a good workaround or a proposed fix there. These issues tend to get fixed fast for popular projects.
In a production environment, it may be preferable to lock production dependencies using npm shrinkwrap
. The official documentation goes into more detail on the topic.
This book is available through Leanpub. By purchasing the book you support the development of further content.