npm install and permissions
# The problem
While working on the CI script for notes.alex-mille.co, I ran into a permissions problem when installing the netlify-cli.
sudo npm install netlify-cli -g
> esbuild@0.11.18 postinstall /usr/local/lib/node_modules/netlify-cli/node_modules/esbuild
> node install.js
Trying to install "esbuild-linux-64" using npm
Failed to install "esbuild-linux-64" using npm: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/netlify-cli/node_modules/esbuild/esbuild-pwn6zf0scfg'
Trying to download "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.11.18.tgz"
/usr/local/lib/node_modules/netlify-cli/node_modules/esbuild/install.js:195
      throw e;
      ^
Error: EACCES: permission denied, open '/usr/local/lib/node_modules/netlify-cli/node_modules/esbuild/bin/esbuild__'
    at Object.openSync (fs.js:476:3)
    at Object.writeFileSync (fs.js:1467:35)
    at installBinaryFromPackage (/usr/local/lib/node_modules/netlify-cli/node_modules/esbuild/install.js:58:6)
    at processTicksAndRejections (internal/process/task_queues.js:93:5) {
  errno: -13,
  syscall: 'open',
  code: 'EACCES',
  path: '/usr/local/lib/node_modules/netlify-cli/node_modules/esbuild/bin/esbuild__'
}
So it looks like the error is being thrown from a postinstall script for esbuild.
# The solution
Make the npm scripts run in the same context as the originally command (ie,
no user switching). To do this use the --unsafe-perm flag.
sudo npm install netlify-cli -g --unsafe-perm=true
See these posts for more details: