NPM / Error: EACCES: permission denied, scandir
NPM / Error: EACCES: permission denied, scandir
当我输入“npm 运行 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
解决
glob error [Error: EACCES: permission denied, scandir '/root/.npm/_logs'] {
这意味着它正在尝试读取 'root' 目录中的内容,这些内容始终需要 root 访问权限。
尝试运行这样的命令:
sudo npm run build:prod
额外:通常你不应该 运行 使用 sudo 命令。如果您来自 Windows 背景,请将其视为 'Run as administrator',只是拥有更多特权,因此,如果您使用 运行 恶意脚本,它几乎可以访问您系统上的所有内容.有一些 JS 库需要 root/sudo 访问权限才能完成它们的工作
这是一个令人困惑的错误,这是可以理解的;您 运行 npm
作为 root,但它说您无权访问这些文件?这是有充分理由的:)这些问题本质上是关于同一件事的:
- Bower install EACCESS error
我的 详细介绍了正在发生的事情,但本质是这样的:
(NPM) ... uses this bit of code to determine who to run as:
const { uid, gid } = isRoot ? inferOwner.sync(cwd) : {}
and as the docs of infer-owner module says:
Infer the owner of a path based on the owner of its nearest existing parent
因此,如果您运行将 NPM 设置为 root,您还需要将当前目录的所有者更改为 root:
chown -R root /path/of/your/project
但是所有这些麻烦应该为您指出真正的解决方案:不要 运行 NPM 作为 root。您不知道什么样的脚本可能 运行 作为 postinstall
触发器或类似的。注意安全;仅在必要时使用 root 帐户使用 sudo
.
附录:尝试节点 14
如链接答案中所述:
This behavior is only for NPM versions >= 7. NPM versions < 7, which are the ones shipped with Node 12-14 work perfectly fine when running as root. So the quickest fix might simply be to use Node 14.
npm install -g nvm
nvm use 14
替代方法:使用 non-root 用户。
NPM 非常努力(参见)不以 root 身份执行任何操作。那么尝试一下怎么样 - 不是根?你会做这样的事情
- 添加本地用户 (AMI guide),通常
adduser john.doe --disabled-password
- 以新用户身份登录
sudo -s -u john.doe
- 克隆您的存储库:
git clone https://github.com/foo/bar; cd bar
- 运行 NPM 命令
npm i;npm run build:prod
当我输入“npm 运行 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
glob error [Error: EACCES: permission denied, scandir '/root/.npm/_logs'] {
这意味着它正在尝试读取 'root' 目录中的内容,这些内容始终需要 root 访问权限。
尝试运行这样的命令:
sudo npm run build:prod
额外:通常你不应该 运行 使用 sudo 命令。如果您来自 Windows 背景,请将其视为 'Run as administrator',只是拥有更多特权,因此,如果您使用 运行 恶意脚本,它几乎可以访问您系统上的所有内容.有一些 JS 库需要 root/sudo 访问权限才能完成它们的工作
这是一个令人困惑的错误,这是可以理解的;您 运行 npm
作为 root,但它说您无权访问这些文件?这是有充分理由的:)这些问题本质上是关于同一件事的:
- Bower install EACCESS error
我的
(NPM) ... uses this bit of code to determine who to run as:
const { uid, gid } = isRoot ? inferOwner.sync(cwd) : {}
and as the docs of infer-owner module says: Infer the owner of a path based on the owner of its nearest existing parent
因此,如果您运行将 NPM 设置为 root,您还需要将当前目录的所有者更改为 root:
chown -R root /path/of/your/project
但是所有这些麻烦应该为您指出真正的解决方案:不要 运行 NPM 作为 root。您不知道什么样的脚本可能 运行 作为 postinstall
触发器或类似的。注意安全;仅在必要时使用 root 帐户使用 sudo
.
附录:尝试节点 14
如链接答案中所述:
This behavior is only for NPM versions >= 7. NPM versions < 7, which are the ones shipped with Node 12-14 work perfectly fine when running as root. So the quickest fix might simply be to use Node 14.
npm install -g nvm
nvm use 14
替代方法:使用 non-root 用户。
NPM 非常努力(参见
- 添加本地用户 (AMI guide),通常
adduser john.doe --disabled-password
- 以新用户身份登录
sudo -s -u john.doe
- 克隆您的存储库:
git clone https://github.com/foo/bar; cd bar
- 运行 NPM 命令
npm i;npm run build:prod