hexo/node_modules/node-gyp/docs/Error-pre-versions-of-node-...

3.8 KiB

When using node-gyp you might see an error like this when attempting to compile/install a node.js native addon:

$ npm install bcrypt
npm http GET https://registry.npmjs.org/bcrypt/0.7.5
npm http 304 https://registry.npmjs.org/bcrypt/0.7.5
npm http GET https://registry.npmjs.org/bindings/1.0.0
npm http 304 https://registry.npmjs.org/bindings/1.0.0

> bcrypt@0.7.5 install /home/ubuntu/public/song-swap/node_modules/bcrypt
> node-gyp rebuild

gyp ERR! configure error
gyp ERR! stack Error: "pre" versions of node cannot be installed, use the --nodedir flag instead
gyp ERR! stack     at install (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/install.js:69:16)
gyp ERR! stack     at Object.self.commands.(anonymous function) [as install] (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/node-gyp.js:56:37)
gyp ERR! stack     at getNodeDir (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:219:20)
gyp ERR! stack     at /usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:105:9
gyp ERR! stack     at ChildProcess.exithandler (child_process.js:630:7)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:99:17)
gyp ERR! stack     at maybeClose (child_process.js:730:16)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:797:5)
gyp ERR! System Linux 3.5.0-21-generic
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/ubuntu/public/song-swap/node_modules/bcrypt
gyp ERR! node -v v0.11.2-pre
gyp ERR! node-gyp -v v0.9.5
gyp ERR! not ok
npm ERR! bcrypt@0.7.5 install: `node-gyp rebuild`
npm ERR! `sh "-c" "node-gyp rebuild"` failed with 1
npm ERR!
npm ERR! Failed at the bcrypt@0.7.5 install script.
npm ERR! This is most likely a problem with the bcrypt package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls bcrypt
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 3.5.0-21-generic
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install" "bcrypt"
npm ERR! cwd /home/ubuntu/public/song-swap
npm ERR! node -v v0.11.2-pre
npm ERR! npm -v 1.2.18
npm ERR! code ELIFECYCLE
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /home/ubuntu/public/song-swap/npm-debug.log
npm ERR! not ok code 0

The main error here is:

Error: "pre" versions of node cannot be installed, use the --nodedir flag instead

This error is caused when you attempt to compile a native addon using a version of node.js with -pre at the end of the version number:

$ node -v
v0.10.4-pre

How to avoid (the short answer)

To avoid this error completely just use a stable release of node.js. i.e. v0.10.4, and not v0.10.4-pre.

How to fix (the long answer)

This error happens because node-gyp does not know what header files were used to compile your "pre" version of node, and therefore it needs you to specify the node source code directory path using the --nodedir flag.

For example, if I compiled my development ("pre") version of node.js using the source code in /Users/nrajlich/node, then I could invoke node-gyp like:

$ node-gyp rebuild --nodedir=/Users/nrajlich/node

Or install an native addon through npm like:

$ npm install bcrypt --nodedir=/Users/nrajlich/node

Always use --nodedir

Note: This is for advanced users who use -pre versions of node more often than tagged releases.

If you're invoking node-gyp through npm, then you can leverage npm's configuration system and not have to specify the --nodedir flag all the time:

$ npm config set nodedir /Users/nrajlich/node