angularjs NPM /错误:EACCES:权限被拒绝,scandir [重复]

mec1mxoz  于 2023-04-04  发布在  Angular
关注(0)|答案(3)|浏览(164)

此问题在此处已有答案

Getting EACCESS when running NPM 8 as root(2个答案)
去年关闭了。
当我输入“npm run build:prod”时

build:prod
    npm run build -- --configuration production --aot --optimization=false

我得到这个错误:

> fancy-name@0.0.0 build:prod
> npm run build -- --configuration production --aot --optimization=false

glob error [Error: EACCES: permission denied, scandir '/root/.npm/_logs'] {
 errno: -13,
 code: 'EACCES',
 syscall: 'scandir',
 path: '/root/.npm/_logs'
}
npm WARN logfile Error: EACCES: permission denied, scandir '/root/.npm/_logs'
npm WARN logfile  error cleaning log files [Error: EACCES: permission denied, scandir '/root/.npm/_logs'] {
npm WARN logfile   errno: -13,
npm WARN logfile   code: 'EACCES',
npm WARN logfile   syscall: 'scandir',
npm WARN logfile   path: '/root/.npm/_logs'
npm WARN logfile }
⸨⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⸩ ⠙ : WARN logfile Error: EACCES: permission denied, scandir '/root/.npm/_logs'
> fancy-name@0.0.0 build
> ng build "--configuration" "production" "--aot" "--optimization=false"

Node.js version v17.4.0 detected.file Error: EACCES: permission denied, scandir '/root/.npm/_logs'
Odd numbered Node.js versions will not enter LTS status and should not be used for production. For more information, please see https://nodejs.org/en/about/releases/.
This version of CLI is only compatible with Angular versions ^13.0.0-next || >=13.0.0 <14.0.0,ogs'
but Angular version 12.1.3 was found instead.

Please visit the link below to find instructions on how to update Angular.
https://update.angular.io/

我已经尝试删除node_module & package.json并再次运行NPM install,但它不起作用(Linux 4.19.0-16-cloud-amd 64)
编辑:使用chown -R root /path/of/your/project解决

ffx8fchx

ffx8fchx1#

更新:此问题和下面的答案仅适用于NPM 7和8(more info)。

这个快速修复应该通过安装NPM版本〉= 9来解决这个问题。

npm install -g npm@latest

原始答案(适用于随节点15-19提供的NPM 7和8)

这是一个可以理解的令人困惑的错误;你以root身份运行npm,但它说你没有访问文件的权限?这是有充分理由的:)这些问题本质上是关于同一件事的:

我的回答很长,详细说明了正在发生的事情,但本质是这样的:
(NPM)...使用这段代码来确定以谁的身份运行:
const { uid, gid } = isRoot ? inferOwner.sync(cwd) : {}
正如infer-owner模块的文档所说:* 根据路径最近的现有父路径的所有者推断路径的所有者 *
因此,如果你以root身份运行NPM,你还需要将当前目录的所有者更改为root:

chown -R root /path/of/your/project

但所有这些麻烦应该指向真实的的解决方案:不要以root身份运行NPM。你不知道什么样的脚本可能会以postinstall触发器或类似的方式运行。注意安全;仅在必要时使用root帐户,使用sudo

附录:尝试NPM的版本6或〉= 9

如链接的答案中所述:
此行为仅适用于NPM版本7和8。NPM版本〈7,即Node 12-14附带的版本,在以root身份运行时工作得非常好。
所以一些快速的解决方法是

  • npm install -g npm@latest # Use the latest version of NPM
  • npm install -g nvm && nvm use 14 # Note: End of Life on May 2023
  • npm install -g nvm && nvm use 18 # Uses NPM 9, too new for some deps?
tct7dpnv

tct7dpnv2#

可选方式:使用非root用户。

NPM非常努力地尝试不以root身份执行任何操作(参见other answer for details)。那么尝试一下--不以root身份执行呢?你会这样做
1.添加本地用户(AMI guide),通常为adduser john.doe --disabled-password
1.以新用户sudo -s -u john.doe的身份登录
1.克隆您的存储库:git clone https://github.com/foo/bar; cd bar
1.运行NPM命令npm i;npm run build:prod

mznpcxlj

mznpcxlj3#

glob错误[错误:EACCES:permission denied,scandir '/root/.npm/_logs'] {
这意味着它正在尝试读取'root'目录上的内容,这些内容总是需要root访问。
试着像这样运行命令:

sudo npm run build:prod

额外:通常你不应该用sudo运行命令。如果你来自Windows背景,可以把它想象成“以管理员身份运行”,只不过有更多的权限,所以如果你运行的是恶意脚本,它几乎可以访问你系统上的所有东西。有一些JS库需要root/sudo访问权限才能完成它们的任务。

相关问题