【问题标题】:sh: 1: node: Permission deniedsh:1:节点:权限被拒绝
【发布时间】:2019-01-19 13:09:44
【问题描述】:

尝试在 ubuntu 18.04 上运行此命令

npm install -g pngquant-bin

但我得到了这个错误,

[..................] | fetchMetadata: sill resolveWithNewModule npm-conf@1.1.3 checking installable status
npm WARN deprecated gulp-util@3.0.8: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
/root/.nvm/versions/node/v10.8.0/bin/pngquant -> /root/.nvm/versions/node/v10.8.0/lib/node_modules/pngquant-bin/cli.js

> pngquant-bin@5.0.0 postinstall /root/.nvm/versions/node/v10.8.0/lib/node_modules/pngquant-bin
> node lib/install.js

sh: 1: node: Permission denied
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! pngquant-bin@5.0.0 postinstall: `node lib/install.js`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the pngquant-bin@5.0.0 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-08-12T18_08_02_197Z-debug.log

你知道如何处理这个问题吗? 我尝试了articles 中的所有解决方案,但都没有成功。

【问题讨论】:

    标签: node.js npm


    【解决方案1】:

    遇到同样的错误sh: 1: node: Permission denied

    所以这对我有用

    npm config set user 0
    npm config set unsafe-perm true
    

    【讨论】:

    • 如果您在 root 帐户下运行 NPM,这是正确的答案。但请记住,这是不安全的(除非您知道自己在做什么)。
    • 哇,我很高兴发现这行得通,但也对错误消息如此具有误导性感到失望。我在 Raspberry Pi 3(2019 年 4 月的 raspbian 映像)上使用 nvm 遇到了这个问题,并与它战斗了一个多小时。哪里可以让 PR 打印出类似 “拒绝以不安全的权限运行(例如 root 用户)的警告。请参阅 了解更多信息。”
    • 如果您知道,您能否详细说明导致权限问题的实际原因?
    • 你太棒了 maaan
    • 对我来说工作得很好,太棒了! Linux Debian 克星。节点 v14.16.1 和 NPM 6.14.12
    【解决方案2】:

    这些问题是由于包装损坏而发生的。转到主文件夹。如果使用 Linux 使用命令

    sudo rm -rf node_modules.
    

    如果你正在使用 yarn,然后运行这个命令

    yarn install
    

    如果你使用 npm 运行这个命令

    npm install
    

    【讨论】:

      【解决方案3】:

      原始消息中的/root/.npm/... 日志路径显示您已经以root 身份运行,并且(尽管其他人建议)我认为这很可能导致您的问题。 p>

      我以 root 身份运行 Node 的(有限)经验是,大多数 npm install 运行会走很长一段路,但随后会因您显示的错误的一些变化而失败。我发现的唯一可靠的解决方案是在 Ubuntu 上根本不以 root 身份运行 Node 或 npm。只需使用普通用户帐户下载并解压 Node 安装即可。

      对我来说,以 root 身份运行至少有一个问题是因为某些依赖关系 npm install 脚本正在调用 setuid 以切换到权限较低的用户。出于某种原因,它选择了 UID 500(在 Ubuntu 上不存在),因此失去了所有特权。因此,“权限被拒绝”错误是因为我以 root 身份运行; setuid 不适用于普通用户。

      我相信这与Error: setuid user id does not exist npm ERR! when npm install forever -g有关。

      【讨论】:

        【解决方案4】:

        事实上,npm 不能使用root 帐户安装任何东西。如果您使用root 帐户,npm 将创建一个无权限帐户进行安装。在这种情况下,如果包需要执行writeFile或其他需要权限的操作,则会出现错误node: Permission denied

        所以,你可以任意选择以下:

        • npm install xxx --unsafe-perm
        • npm config set unsafe-perm true
        • 创建高权限帐户专用执行npm install

        【讨论】:

          【解决方案5】:

          我将 chown 设置为项目用户所有者(在 USERID 中)目录并解决“权限被拒绝”问题:

          sudo chown -R USERID.USERID *

          【讨论】:

            【解决方案6】:

            此外(这可能对docker 有用)您可以通过环境变量npm_config_user 全局覆盖此配置设置——例如:

            ENV npm_config_user=root
            

            【讨论】:

            • 这在个人机器上可能是一种不好的做法。话虽如此,我将 docker WSL2 用于开发环境并且不生成用户。当我尝试通过npx sb init安装故事书时,这对我有用
            【解决方案7】:

            这是一个老问题,但也许有人仍然需要一些帮助。

            通常会显示此错误,因为您在 package.json 中仅定义了路径。例如:

            {
              // more definitions
              "scripts": {
                // other scripts
                "getPax8Products": "<filepath>",
                // more scripts
              },
              // more definitions
            }
            

            在这种情况下,您需要:

            1. 在脚本的最开头添加以下行
            #!/usr/bin/env node
            'use strict';
            
            1. 赋予文件执行权限
            # in UNIX based
            chmod +x <filepath>
            

            您也可以修改 package.json 并添加 node 命令。但是,您需要注意 NPM 将在脚本的目录中运行:

            {
              // more definitions
              "scripts": {
                // other scripts
                "getPax8Products": "node <filepath>",
                // more scripts
              },
              // more definitions
            }
            

            【讨论】:

              【解决方案8】:

              对我来说,我还没有安装我的依赖项。 node_modules 不存在,但显然我已经在全球范围内安装了 jest。运行 npm ci 然后运行 ​​npm test 解决了我的问题。

              【讨论】:

                【解决方案9】:
                1. npm install lite-server --save-dev

                2. packages.json:

                  "scripts": {
                    "dev": "lite-server",
                  },
                  
                  "devDependencies": {
                  "lite-server": "^2.6.1"
                  }
                  
                3. npm run dev

                【讨论】:

                • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
                【解决方案10】:

                使用 Docker 部署:

                • 确保 /node_modules 已删除或添加到 dockerignorefile
                • 确保 /dist 已删除或添加到 dockerignorefile

                通过删除这两个文件为我解决了问题 并在容器中构建它们

                【讨论】:

                  【解决方案11】:

                  您需要root用户权限,只需在命令前添加sudo关键字并输入您的密码

                  sudo npm install -g pngquant-bin
                  

                  【讨论】:

                  • 安装 npm 包时不要使用 root 权限
                  【解决方案12】:

                  尝试在项目文件夹中安装节点

                  npm install node
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-05-27
                    • 2021-09-23
                    • 2018-11-16
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多