mirror of
https://github.com/electron/node-gyp.git
synced 2025-08-15 12:58:19 +02:00
fix: doc how to update node-gyp independently from npm
This commit is contained in:
parent
b6e1cc7127
commit
c8c0af72e7
1 changed files with 22 additions and 44 deletions
|
@ -6,63 +6,41 @@ not running a [current version of node-gyp](https://github.com/nodejs/node-gyp/r
|
|||
`npm` bundles its own, internal, copy of `node-gyp`. This internal copy is independent of any globally installed copy of node-gyp that
|
||||
may have been installed via `npm install -g node-gyp`.
|
||||
|
||||
This means that while `node-gyp` doesn't get installed into your `$PATH` by default, npm still keeps its own copy to invoke when you
|
||||
attempt to `npm install` a native add-on.
|
||||
Generally, npm's library files are installed inside your global "node_modules",where npm is installed (run `npm prefix` and add `lib/node_modules`, or just `node_modules` for Windows). There are some exceptions to this. Inside this global `node_modules/`there will be an `npm/` directory and inside this you'll find a `node_modules/node-gyp/` directory. So it may look something like `/usr/local/lib/node_modules/npm/node_modules/node-gyp/`. This is the version of node-gyp that ships with npm.
|
||||
|
||||
Sometimes, you may need to update npm's internal node-gyp to a newer version than what is installed. A simple `npm install -g node-gyp`
|
||||
_won't_ do the trick since npm will still continue to use its internal copy over the global one.
|
||||
When you install a _new_ version of node-gyp with outside of npm, it'll go into your global node_modules, but not under the `npm/node_modules`. So that may look like `/usr/local/lib/node_modules/node-gyp/`. It'll have the `node-gyp` executable linked into your `PATH` so running `node-gyp` will use this version.
|
||||
|
||||
So instead:
|
||||
The catch is that npm won't use this version unless you tell it to, it'll keep on using the one you have installed. You need to instruct it to by setting the `node_gyp` config variable (which goes into your `~/.npmrc`). You do this by running the `npm config set` command as below. Then npm will use the command in the path you supply whenever it needs to build a native addon.
|
||||
|
||||
## Version of npm
|
||||
**Important**: You also need to remember to unset this when you upgrade npm with a newer version of node-gyp, or you have to manually keep your globally installed node-gyp to date. See "Undo" below.
|
||||
|
||||
We need to start by knowing your version of `npm`:
|
||||
```bash
|
||||
npm --version
|
||||
## Linux and macOS
|
||||
```
|
||||
npm install --global node-gyp@latest
|
||||
npm config set node_gyp $(npm prefix -g)/lib/node_modules/node-gyp/bin/node-gyp.js
|
||||
```
|
||||
|
||||
## Linux, macOS, Solaris, etc.
|
||||
|
||||
Unix is easy. Just run the following command.
|
||||
|
||||
If your npm is version ___7___, do:
|
||||
```bash
|
||||
$ npm explore npm/node_modules/@npmcli/run-script -g -- npm_config_global=false npm install node-gyp@latest
|
||||
```
|
||||
|
||||
Else if your npm is version ___less than 7___, do:
|
||||
```bash
|
||||
$ npm explore npm/node_modules/npm-lifecycle -g -- npm install node-gyp@latest
|
||||
```
|
||||
|
||||
If the command fails with a permissions error, please try `sudo` and then the command.
|
||||
`sudo` may be required for the first command if you get a permission error.
|
||||
|
||||
## Windows
|
||||
@joaocgreis' Windows instructions from [#1753 (comment)](https://github.comnodejs/node-gyp/issues/1753#issuecomment-501827267)
|
||||
|
||||
Windows is a bit trickier, since `npm` might be installed to the "Program Files" directory, which needs admin privileges in order to
|
||||
modify on current Windows. Therefore, run the following commands __inside a `cmd.exe` started with "Run as Administrator"__:
|
||||
|
||||
First we need to find the location of `node`. If you don't already know the location that `node.exe` got installed to, then run:
|
||||
```bash
|
||||
$ where node
|
||||
### Windows Command Prompt
|
||||
```
|
||||
npm install --global node-gyp@latest
|
||||
for /f "delims=" %P in ('npm prefix -g') do npm config set node_gyp"%P\node_modules\node-gyp\bin\node-gyp.js"
|
||||
```
|
||||
|
||||
Now `cd` to the directory that `node.exe` is contained in e.g.:
|
||||
```bash
|
||||
$ cd "C:\Program Files\nodejs"
|
||||
### Powershell
|
||||
```
|
||||
npm install --global node-gyp@latest
|
||||
npm prefix -g | % {npm config set node_gyp "$_\node_modules\node-gyp\bin\node-gypjs"}
|
||||
```
|
||||
|
||||
If your npm version is ___7___, do:
|
||||
```bash
|
||||
cd node_modules\npm\node_modules\@npmcli\run-script
|
||||
```
|
||||
## Undo
|
||||
**Beware** if you don't unset the `node_gyp` config option, npm will continue to use the globally installed version of node-gyp rather than the one it ships with,which may end up being newer.
|
||||
|
||||
Else if your npm version is ___less than 7___, do:
|
||||
```bash
|
||||
cd node_modules\npm\node_modules\npm-lifecycle
|
||||
```
|
||||
|
||||
Finish by running:
|
||||
```bash
|
||||
$ npm install node-gyp@latest
|
||||
npm config delete node_gyp
|
||||
npm uninstall --global node-gyp
|
||||
```
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue