此问题在此处已有答案:
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
解决
3条答案
按热度按时间ffx8fchx1#
更新:此问题和下面的答案仅适用于NPM 7和8(more info)。
这个快速修复应该通过安装NPM版本〉= 9来解决这个问题。
原始答案(适用于随节点15-19提供的NPM 7和8)
这是一个可以理解的令人困惑的错误;你以root身份运行
npm
,但它说你没有访问文件的权限?这是有充分理由的:)这些问题本质上是关于同一件事的:我的回答很长,详细说明了正在发生的事情,但本质是这样的:
(NPM)...使用这段代码来确定以谁的身份运行:
const { uid, gid } = isRoot ? inferOwner.sync(cwd) : {}
正如infer-owner模块的文档所说:* 根据路径最近的现有父路径的所有者推断路径的所有者 *
因此,如果你以root身份运行NPM,你还需要将当前目录的所有者更改为root:
但所有这些麻烦应该指向真实的的解决方案:不要以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?
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
mznpcxlj3#
glob错误[错误:EACCES:permission denied,scandir '/root/.npm/_logs'] {
这意味着它正在尝试读取'root'目录上的内容,这些内容总是需要root访问。
试着像这样运行命令:
额外:通常你不应该用sudo运行命令。如果你来自Windows背景,可以把它想象成“以管理员身份运行”,只不过有更多的权限,所以如果你运行的是恶意脚本,它几乎可以访问你系统上的所有东西。有一些JS库需要root/sudo访问权限才能完成它们的任务。