I'm getting a strange permission error when I try to install an npm module. I'm starting it with sudo
so I'm sure I do have access, but for some reason it keeps complaining with an error:
stack Error: EACCES: permission denied, mkdir '/usr/lib/node_modules/joplin/node_modules/sqlite3/build'
I've tried restarting my computer, and creating a directory /usr/lib/node_modules/joplin
with chmod 777, but it still doesn't work.
$ sudo npm install -g joplin /usr/bin/joplin -> /usr/lib/node_modules/joplin/main.js > [email protected] install /usr/lib/node_modules/joplin/node_modules/sqlite3 > node-pre-gyp install --fallback-to-build node-pre-gyp ERR! Tried to download(undefined): https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v3.1.9/node-v48-linux-x64.tar.gz node-pre-gyp ERR! Pre-built binaries not found for [email protected] and [email protected] (node-v48 ABI) (falling back to source compile with node-gyp) gyp ERR! configure error gyp ERR! stack Error: EACCES: permission denied, mkdir '/usr/lib/node_modules/joplin/node_modules/sqlite3/build' gyp ERR! stack at Error (native) gyp ERR! System Linux 4.4.0-43-Microsoft gyp ERR! command "/usr/bin/nodejs" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "configure" "--fallback-to-build" "--module=/usr/lib/node_modules/joplin/node_modules/sqlite3/lib/binding/node-v48-linux-x64/node_sqlite3.node" "--module_name=node_sqlite3" "--module_path=/usr/lib/node_modules/joplin/node_modules/sqlite3/lib/binding/node-v48-linux-x64" gyp ERR! cwd /usr/lib/node_modules/joplin/node_modules/sqlite3 gyp ERR! node -v v6.11.2 gyp ERR! node-gyp -v v3.6.2 gyp ERR! not ok node-pre-gyp ERR! build error node-pre-gyp ERR! stack Error: Failed to execute '/usr/bin/nodejs /usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js configure --fallback-to-build --module=/usr/lib/node_modules/joplin/node_modules/sqlite3/lib/binding/node-v48-linux-x64/node_sqlite3.node --module_name=node_sqlite3 --module_path=/usr/lib/node_modules/joplin/node_modules/sqlite3/lib/binding/node-v48-linux-x64' (1) node-pre-gyp ERR! stack at ChildProcess.<anonymous> (/usr/lib/node_modules/joplin/node_modules/sqlite3/node_modules/node-pre-gyp/lib/util/compile.js:83:29) node-pre-gyp ERR! stack at emitTwo (events.js:106:13) node-pre-gyp ERR! stack at ChildProcess.emit (events.js:191:7) node-pre-gyp ERR! stack at maybeClose (internal/child_process.js:891:16) node-pre-gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5) node-pre-gyp ERR! System Linux 4.4.0-43-Microsoft node-pre-gyp ERR! command "/usr/bin/nodejs" "/usr/lib/node_modules/joplin/node_modules/sqlite3/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build" node-pre-gyp ERR! cwd /usr/lib/node_modules/joplin/node_modules/sqlite3 node-pre-gyp ERR! node -v v6.11.2 node-pre-gyp ERR! node-pre-gyp -v v0.6.36 node-pre-gyp ERR! not ok
Edit
I've also tried sudo npm i sqlite3 -g --build-from-source
but getting the same error Error: EACCES: permission denied, mkdir '/usr/lib/node_modules/sqlite3/build'
so it seems to be something to do with sqlite3.
Run “npm config get prefix” in your terminal. This will give the path of global node_modules: For ex: /usr/local. Change the user permissions for this folder by using following command: sudo chown -R <user_id> /usr/local/
When you run as sudo, npm installs files to the same directory, but now they are owned by root. So this is what happens to absolutely every single person who has ever used npm : install some local packages without issue using npm install foo. install global package using sudo install -g foo-cli without issue.
You need to reclaim ownership of the .npm directory.
sudo chown -R $(whoami) ~/.npm
and need the write permission in node_modules directory:
sudo chown -R $(whoami) /usr/lib/node_modules
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With