npm install puppeteer 显示权限被拒绝错误

npm install puppeteer showing permission denied errors

我无法将 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

编辑 2019 年 4 月 20 日:

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

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

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

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

  • 运行 unsafe-perm=true 使用 sudo,作为 non-root 用户,将授予脚本 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

然而,由于权限错误,chromium 将不会被下载,这就是为什么你必须如前所述使用 ---unsafe-perm=true

安全相关资源:

  • 不用sudo解决,可以用this answer.
  • 了解有关处理 /var/www 文件夹的最佳做法的更多信息,请参阅 this answer

祝你好运!

运行 在您的终端上:

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

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

Puppeteer Documentation 状态:

Note: Puppeteer requires at least Node v6.4.0, but the examples below use async/await which is only supported in Node v7.6.0 or greater.

您可以使用以下命令检查 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

我做到了:

  1. yarn install --ignore-scripts
  2. yarn install.

并且它在没有 sudo 或全局包安装的情况下工作。

它应该也适用于 npm

我有 Ubuntu 20.04.