背景
运行环境:CentOS Linux release 7.5.1804
node版本:v16.19.0
运行时执行:npm install
报错如下:
vue-demi@0.13.11 postinstall /root/h-management-prototype/node_modules/@nuxtjs/i18n/node_modules/vue-demi
node ./scripts/postinstall.js
node:internal/fs/utils:347
throw err;
^
Error: EACCES: permission denied, open '/root/h-management-prototype/node_modules/@nuxtjs/i18n/node_modules/vue-demi/lib/index.cjs'
at Object.openSync (node:fs:590:3)
at Object.writeFileSync (node:fs:2202:35)
at copy (/root/h-management-prototype/node_modules/@nuxtjs/i18n/node_modules/vue-demi/scripts/utils.js:24:6)
at switchVersion (/root/h-management-prototype/node_modules/@nuxtjs/i18n/node_modules/vue-demi/scripts/utils.js:52:3)
at Object.<anonymous> (/root/h-management-prototype/node_modules/@nuxtjs/i18n/node_modules/vue-demi/scripts/postinstall.js:15:3)
at Module._compile (node:internal/modules/cjs/loader:1165:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1219:10)
at Module.load (node:internal/modules/cjs/loader:1043:32)
at Function.Module._load (node:internal/modules/cjs/loader:878:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) {
errno: -13,
syscall: 'open',
code: 'EACCES',
path: '/root/h-management-prototype/node_modules/@nuxtjs/i18n/node_modules/vue-demi/lib/index.cjs'
}
报错原因
在 Linux 系统中,root 用户并不会自动获得 npm 包的安装权限,需要手动设置权限
解决办法
可以通过在执行 npm 命令时添加 --unsafe-perm=true
参数来解决该问题。该参数会告诉 npm 在安装包的过程中不要检查权限,直接以 root 用户身份执行。
npm i --unsafe-perm=true
注意
使用 --unsafe-perm=true
参数会使 npm 以 root 用户身份执行,这可能会对系统造成潜在的安全风险。因此,建议仅在必要时使用该参数。