Node.js: Difference between revisions
imported>Samueldr Inits page with -g FAQ entry |
imported>Samueldr |
||
(No difference)
|
Revision as of 19:38, 17 July 2018
FAQ
Using npm install -g
fails
The following errors are to be expected.
npm ERR! Error: EACCES: permission denied, access '/nix/store/00000000000000000000000000000000-nodejs-6.14.3/lib/node_modules' npm ERR! at Error (native) npm ERR! { Error: EACCES: permission denied, access '/nix/store/00000000000000000000000000000000-nodejs-6.14.3/lib/node_modules' npm ERR! at Error (native) npm ERR! errno: -13, npm ERR! code: 'EACCES', npm ERR! syscall: 'access', npm ERR! path: '/nix/store/00000000000000000000000000000000-nodejs-6.14.3/lib/node_modules' } npm ERR! npm ERR! Please try running this command again as root/Administrator.
The store is read-only as it should be. Purity in Nix and NixOS makes it right not to allow installation using -g
.
There are a couple solutions, none of them are strictly wrong. You can either configure npm
so it installs globally to your home, or avoid using -g
entirely. It is also possible, for node versions 8 and greater, to use npx
.
Install to your home
This is done through configuring npm and amending your PATH.[1]
$ npm set prefix ~/.npm-global
Then, amend your PATH so it looks into $HOME/.npm-global.
Avoid using -g
This is a bit harder to implement, but creates a bit more strictness in your environment; it will be impossible accidentally make use of what would have been a globally installed package. The idea is to install it to either a temporary transitory folder or to the project folder, then run the locally installed instance of the package, the binaries are found under node_packages/.bin/.[2]
$ npm install uglify-es [ ... ] $ ls -l node_modules/.bin/ total 0 lrwxrwxrwx 1 user users 25 Jul 17 15:34 uglifyjs -> ../uglify-es/bin/uglifyjs $ node_modules/.bin/uglifyjs --help Usage: uglifyjs [options] [files...]
Using npx
$ nix-shell -p nodejs-8_x $ npx create-react-app --help npx: installed 67 in 1.671s Usage: create-react-app <project-directory> [options] [...]