npm命令 - sudo与否?

Kos*_*ika 23 macos sudo npm

目前我总是跑,sudo npm install <package-name>但据我所知,这是不正确的.

我希望有机会不以root用户身份使用它.我遵循了一些建议并使用了这个命令,sudo chown -R <username> ~/.npm但它不起作用......

例如,它是我的输出 npm install jade

...
npm http 200 https://registry.npmjs.org/amdefine
npm http GET https://registry.npmjs.org/amdefine/-/amdefine-0.0.5.tgz
npm http 200 https://registry.npmjs.org/amdefine/-/amdefine-0.0.5.tgz
npm ERR! Error: EACCES, symlink '../jade/bin/jade'
npm ERR!  { [Error: EACCES, symlink '../jade/bin/jade'] errno: 3, code: 'EACCES', path: '../jade/bin/jade' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.
Run Code Online (Sandbox Code Playgroud)

如您所见,下载已成功启动,但随后失败了..

我想知道在npm上禁止sudo的最佳方法是什么?

lio*_*llo 15

npm install -g没有节点模块是可能的(也是可取的)sudo.

检查/usr/local/share/npm/bin文件夹的权限.我已经通过brew(没有sudo)安装了node和npm,并且该特定文件夹最终归root所有.

这固定了一次又一次:

$ sudo chown $(whoami) /usr/local/share/npm/bin
Run Code Online (Sandbox Code Playgroud)

(至于禁用sudonpm:你必须为此调整npm.你自己的节点代码可以使用https://npmjs.org/package/sudo-block,npm install sudo-block)

编辑:即使这有效,我不再使用-g.而是使用前缀(参见下一个答案),或者更好地使用NIX https://unix.stackexchange.com/a/381797(即使在OSX上)

  • 这是一个糟糕的一般答案,因为这会产生安全问题,用户可以修改全局PATH中的二进制文件.第二个答案更好. (3认同)
  • 我必须更改/ usr/local/bin和/ usr/local/lib/node_modules的权限 (2认同)

feb*_*Ley 14

在我看来是指定npm前缀最干净的方法:

npm config set prefix ~/.node_modules
Run Code Online (Sandbox Code Playgroud)

然后将以下内容添加到.bash_profile中

export PATH=$HOME/.node_modules/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

现在这些软件包将安装到您的用户目录中,并且不会对任何权限进行修改.


编辑:如果您无法安装yeoman,请在名为yodoctor的一个PATH目录中创建一个bash文件,其中包含以下内容

#!/bin/bash
yo doctor
Run Code Online (Sandbox Code Playgroud)

使文件可执行

chmod +x yodoctor
Run Code Online (Sandbox Code Playgroud)

现在你应该可以安装自耕农了.

  • 请参阅npm推荐的修复npm权限问题的选项:[https://docs.npmjs.com/getting-started/fixing-npm-permissions](https://docs.npmjs.com/getting-started/fixing-npm-权限).这个答案(来自@febLey)与NPM的建议一致. (2认同)