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

时间:2018-02-19 15:56:56

标签: node.js npm puppeteer

我无法安装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

3 个答案:

答案 0 :(得分:7)

2019年4月20日编辑:

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

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

只要您信任木偶操作员并希望它在全球范围内安装木偶操作员,这是可以的。

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

  • 使用sudo作为非root用户运行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

但是,由于权限错误,不会下载Chrome,这就是您必须按照之前的说明使用---unsafe-perm=true的原因。

安全相关资源:

  • 在没有sudo的情况下解决此问题,您可以使用this answer
  • 了解有关处理/ var / www文件夹的最佳做法的详情,请参阅this answer

祝你好运!

答案 1 :(得分:6)

在您的终端上运行:

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

答案 2 :(得分: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