【问题标题】:NPM / Error: EACCES: permission denied, scandir [duplicate]NPM /错误:EACCES:权限被拒绝,scandir [重复]
【发布时间】:2022-02-02 18:23:59
【问题描述】:

当我输入“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-amd64)

编辑:用chown -R root /path/of/your/project解决

【问题讨论】:

    标签: javascript node.js angularjs npm


    【解决方案1】:

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

    我的quite long answer 详细介绍了正在发生的事情,但本质是这样的:

    (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

    附录:尝试节点 14

    如链接答案中所述:

    此行为仅适用于 NPM 版本 >= 7。NPM 版本

    • npm install -g nvm
    • nvm use 14

    【讨论】:

    • 我已经尝试更改所有者,但没有任何效果:/,也许我做错了什么,但我不明白
    • 要将所有者更改为root,请执行chown -R root /path/of/your/project
    • 该死,我做 chown 命令错误,错误不再感谢!
    【解决方案2】:

    替代方法:使用非 root 用户。

    NPM 非常努力(请参阅other answer for details)不以 root 身份执行任何操作。那么尝试一下怎么样 - 不是root?你会做这样的事情

    1. 添加本地用户 (AMI guide),通常为 adduser john.doe --disabled-password
    2. 以新用户sudo -s -u john.doe登录
    3. 克隆你的仓库:git clone https://github.com/foo/bar; cd bar
    4. 运行 NPM 命令npm i;npm run build:prod

    【讨论】:

    • 没有其他方法可以用 root 来做吗?
    • 我在链接的答案中发布了一种以 root 身份执行此操作的方法。我会在下面转发它
    • 为什么你必须是root,顺便说一句?我已经使用 Linux 20 年了,如果做得对的话,除了偶尔的管理工作之外,我永远不需要成为 root。
    • 这不是我的服务器,我的“老板”说“在 root 中执行”所以 ... x)
    • 哈哈,如果老板这么说,而且他是那种不听合理建议的老板,那我完全理解。谢天谢地,从来没有经历过。祝你好运!
    【解决方案3】:

    glob 错误 [错误:EACCES:权限被拒绝,scandir '/root/.npm/_logs'] {

    这意味着它正在尝试读取 'root' 目录中的某些内容,而这些内容始终需要 root 访问权限。

    尝试像这样运行命令:

    sudo npm run build:prod
    

    额外:通常你不应该使用 sudo 运行命令。如果您来自 Windows 背景,则将其视为“以管理员身份运行”,仅具有更多权限,因此如果您正在运行恶意脚本,它几乎可以访问系统上的所有内容。有一些 JS 库需要 root/sudo 访问权限才能完成他们的工作

    【讨论】:

    • 嗨,感谢您的回复,我在 Linux 4.19.0-16-cloud-amd64 上并且我以 root 身份登录并使用 sudo 运行,不要改变任何东西:/
    • 这在较新的 NPM 版本中不起作用
    • 您可以尝试使用 Node 16 吗?如果您没有正确设置权限,sudo chown -R username:username /root/.npm/_logs 也可能会起作用
    • 我在节点v17.4.0上,我会尝试节点16,chown命令不能解决错误
    • 如果您遇到这种情况,也发现了这个stackoverflow.com/questions/48910876/…
    猜你喜欢
    • 2017-12-29
    • 2018-04-20
    • 1970-01-01
    • 2021-07-22
    • 2019-10-28
    • 2018-03-01
    • 2021-11-24
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多