我无法安装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
错误信息:
> [email protected] 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 [email protected] No description
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `node install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] 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
对于权限相关的问题。原因是:
- 以非 root 用户身份使用 sudo 运行 unsafe-perm=true 将为脚本提供 root 访问权限。仅当您信任该脚本并且不太关心安全性时,这可能没问题。
- 您可能需要使用
--no-sandbox
在您运行的每个脚本中,因为使用此命令安装的 chrome 在没有此参数的情况下可能无法运行。看到这个github问题.
你已经安装了 npmsudo
。因此,您在全球范围内安装的任何内容都需要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 即可解决此问题,您可以使用这个答案.
- 了解有关处理 /var/www 文件夹的最佳实践的更多信息,请参阅这个答案.
祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)