Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Some packages (for example sharp) don't list
node-gyp
in their dependencies even though they need it to build themselves. The reasoning they invoke is thatnode-gyp
only is needed for some users. I don't agree with this assessment (if only because I'm running a regular OSX install and it doesn't seem to have prebuilt packages), but that's not a battle I want to start right now 🙂Anyway, the previous fix was to manually edit the
yarn.lock
in order to manually add a dependency tonode-gyp
to thesharp
package entry. It worked just fine, but was a bit hard to find for people not well versed in Yarn's internals - plus you'd have to do it every time you upgradesharp
.Simultaneously, I didn't want to automatically install
node-gyp
when it is used, or use the global one. These patterns are non-deterministic, dangerous, and go against the principle of a lockfile.This diff is a compromise: instead of crashing and letting the user find what to do by themselves, we now print an helpful error message. Additionally, we allow
node-gyp
to be executed from the root of the project - meaning that users only have to runyarn add node-gyp
at the root of the project for everything to be built as expected.