Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(install): use node-gyp from homebrew npm #4994

Merged
merged 2 commits into from
Jan 15, 2018

Conversation

chrmoritz
Copy link
Contributor

@chrmoritz chrmoritz commented Nov 25, 2017

Summary

With this yarn will be able to discover and use the node-gyp from the homebrew installed npm on macOS instead of falling back to globally installing node-gyp every time a native addon needs to be compiled from source.

Homebrew installs a clean copy of npm inside a libexec folder together with node. Previously yarn didn't look there when trying to locate node-gyp and the globally install node-gyp-fallback would be used every time when building native addons with a yarn version from homebrew.
This PR adds the libexec path of node-gyp from homebrew to the node-gyp search paths of yarn, making it possible to compile native addons using the homebrew npm provided node-gyp with yarn without relying on this fallback.

Test plan

This can't be tested outside a homebrew environment (with node installed by homebrew, not by a node version manager like nvm).

To manually test this on a mac with homebrew installed you can install a test build of this PR (uploaded to github releases on my fork) by installing this gist yarn formula with:

brew reinstall https://gist.githubusercontent.com/chrmoritz/a572e5efca056d4dcff43ba376740bed/raw/21ef12adb4b9efc33c298ed29744dfc89299f936/yarn.rb

After this you can delete your global node-gyp and install any native addon (with yarn config set build-from-source set to skip prebuild / node-pre-gyp) and verify that no new global node-gyp is installed. You could also look at the verbose install output to verify, that the fallback isn't used this time. You can also verify with the current homebrew version of yarn, that the global node-gyp fallback is used every time when building native addons from source until now.

**Summary**

With this yarn will be able to discover and use the node-gyp from the
homebrew installed npm on macOS instead of falling back to globally
installing node-gyp every time a native addon needs to be compiled from
source.

Homebrew installs a clean copy of npm inside a libexec folder together
with node.
Previously yarn didn't look there when trying to locate node-gyp and the
globally install node-gyp fallback would be used every time when
building native addons with a yarn version from homebrew.
This PR adds the libexec path of node-gyp from homebrew to the node-gyp
search paths of yarn, making it possible to compile native addons using
the homebrew npm provided node-gyp with yarn without relying on this
fallback.

**Test plan**

This can't be tested outside a homebrew environment.

A way to manually test this on macOS, by installing a test build of this
PR with homebrew and trying to install a native addon with it, is
provided in the PR description.
@chrmoritz
Copy link
Contributor Author

Could someone please review this PR? (friendly ping @BYK)

What else do I need to get this PR merged?

@arcanis
Copy link
Member

arcanis commented Jan 15, 2018

It makes sense and I guess the line you removed actually test that the feature works, so I'm gonna go ahead and merge it. Thanks for your contribution!

@arcanis arcanis merged commit 953c501 into yarnpkg:master Jan 15, 2018
agoldis added a commit to agoldis/yarn that referenced this pull request Feb 2, 2018
…readdir_files

* upstream/master: (34 commits)
  feat(upgrade, add): Separately log added/upgraded dependencies (yarnpkg#5227)
  feat(publish): Publish command uses publishConfig.access in package.json (yarnpkg#5290)
  fix(CLI): Use process exit instead of exitCode for node < 4 (yarnpkg#5291)
  feat(cli): error on missing workspace directory (yarnpkg#5206) (yarnpkg#5222)
  feat: better error when package is not found (yarnpkg#5213)
  Allow scoped package as alias source (yarnpkg#5229)
  fix(cli): Use correct directory for upgrade-interactive (yarnpkg#5272)
  nohoist baseline implementation (yarnpkg#4979)
  1.4.1
  1.4.0
  Show current version, when new version is not supplied on "yarn publish" (yarnpkg#4947)
  fix(install): use node-gyp from homebrew npm (yarnpkg#4994)
  Fix transient symlinks overriding direct ones v2 (yarnpkg#5016)
  fix(auth): Fixes authentication conditions and logic with registries (yarnpkg#5216)
  chore(package): move devDeps to appropriate place (yarnpkg#5166)
  fix(resolution) Eliminate "missing peerDep" warning when dep exists at root level. (yarnpkg#5088)
  fix(cli): improve guessing of package names that contain a dot (yarnpkg#5102) (yarnpkg#5135)
  feat(cli): include notice with license when generating disclaimer (yarnpkg#5072) (yarnpkg#5111)
  feat(cli): group by license in licenses list (yarnpkg#5074) (yarnpkg#5110)
  feat(cli): improve error message when file resolver can't find file (yarnpkg#5134) (yarnpkg#5145)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants