【问题标题】:npm install puppeteer showing permission denied errorsnpm install puppeteer 显示权限被拒绝错误
【发布时间】:2018-07-29 21:35:28
【问题描述】:

我无法将puppeteer 安装为项目依赖项,我已尝试重新安装节点。任何人都知道如何解决这个问题?运行 Ubuntu 17.10 x64

sudo apt-get purge nodejs;
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -;
apt-get install -y nodejs;
sudo npm install -g n;
sudo n stable;

节点版本:

$ node -v
v9.4.0
$ npm -v
5.6.0

我尝试安装:

root@server:/var/www/html# npm install --save puppeteer

错误信息:

> puppeteer@1.1.0 install /var/www/html/node_modules/puppeteer
> node install.js

ERROR: Failed to download Chromium r536395! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.
{ Error: EACCES: permission denied, mkdir '/var/www/html/node_modules/puppeteer/.local-chromium'
  errno: -13,
  code: 'EACCES',
  syscall: 'mkdir',
  path: '/var/www/html/node_modules/puppeteer/.local-chromium' }
npm WARN project@1.0.0 No description

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! puppeteer@1.1.0 install: `node install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the puppeteer@1.1.0 install 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-02-19T15_55_52_669Z-debug.log

我在引用的问题中看不到任何解决此问题的方法:https://github.com/GoogleChrome/puppeteer/issues/375

【问题讨论】:

    标签: node.js npm puppeteer


    【解决方案1】:

    2019 年 4 月 20 日编辑:

    lauraalvarezz1 建议的简单解决方案是,

    sudo npm install -g puppeteer --unsafe-perm=true
    

    只要您信任 puppeteer 并希望它在全球范围内安装 puppeteer,就可以了。

    但是要小心使用--unsafe-perm=true 来解决与权限相关的问题。原因是:

    • 以非 root 用户身份使用 sudo 运行 unsafe-perm=true 将授予脚本 root 访问权限。仅当您信任脚本并且不太关心安全性时,这可能没问题。
    • 您可能需要在您运行的每个脚本中使用--no-sandbox,因为如果没有此参数,使用此命令安装的 chrome 可能无法运行。看到这个github issue

    您已经使用sudo 安装了 npm。因此,您全局安装的任何东西都需要sudo

    要在var/www/html 文件夹上安装任何东西,要么你必须拥有那个文件夹,

    sudo chown -R $USER /var/www/html
    

    或者你可以使用nvm来管理npm。从技术上讲,它将使用您的主目录和当前用户。

    安装nvm后,可以用它全局安装puppeteer,

    npm i -g puppeteer
    

    或者你必须使用 sudo

    sudo npm install --save puppeteer
    

    但是由于权限错误,不会下载铬,这就是为什么你必须使用---unsafe-perm=true,如前所述。

    安全相关资源:

    • 不用sudo解决这个问题,可以使用this answer
    • 了解有关处理 /var/www 文件夹的最佳实践的更多信息,请参阅 this answer

    祝你好运!

    【讨论】:

    • 递归更改系统上每个文件的所有者?至少你的意思是./
    • 抱歉,已修复:D
    • unsafe-perm=true 有一些(安全)缺点,这就是为什么我去年没有更新我的答案,即使它是一个快速的解决方案。接受和最赞成的答案都是正确的。我的答案中的所有链接都来自 SO 以获得更多资源。
    • “一些(安全)缺点” - 如果人们运行的代码没有在 VM 中得到足够的审查,这可能不是问题,因为他们应该这样做。
    【解决方案2】:

    开始之前,请确保您拥有最新版本的 Node.js。

    Puppeteer Documentation 声明:

    注意:Puppeteer 至少需要 Node v6.4.0,但下面的示例使用 async/await,它仅在 Node v7.6.0 或更高版本中受支持。

    您可以使用以下命令检查您拥有的 Node.js 版本:

    node -v
    # OR nodejs -v
    

    如果你的 Node.js 版本低于 v7.6.0,你可以completely uninstall your current version of Node.js

    然后,您可以使用完整的reinstallation using a PPA

    sudo apt update
    curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh
    sudo bash nodesource_setup.sh
    sudo apt install nodejs
    sudo apt install build-essential
    

    您可以检查系统上安装的 Node.js 和 NPM 的新版本:

    node -v
    npm -v
    

    最后,你可以安装 Puppeteer:

    sudo npm install puppeteer --unsafe-perm=true --allow-root
    

    现在您可以使用 node 命令运行 Puppeteer 脚本:

    node puppeteer-script.js
    

    【讨论】:

      【解决方案3】:

      在终端上运行:

      sudo npm install -g puppeteer --unsafe-perm=true
      

      【讨论】:

        猜你喜欢
        • 2018-06-08
        • 2018-03-01
        • 2019-09-24
        • 1970-01-01
        • 2018-03-08
        • 2018-11-11
        • 1970-01-01
        • 2021-07-22
        • 2019-10-28
        相关资源
        最近更新 更多