MacOS Mojave 10.14.3全局安装Puppeteer失败,求排查方案
解决macOS Mojave全局安装Puppeteer的权限问题
嘿,我来帮你搞定这个头疼的权限问题~ 你遇到的核心问题其实是即使跳过Chromium下载,Puppeteer的安装脚本依然会尝试创建.local-chromium目录,而你用sudo su执行安装时,目录权限的配置导致了写权限被拒绝。另外,直接用root身份安装npm包本身就容易引发后续的权限坑,咱们一步步来修复:
第一步:清理残留的无效目录
先把之前安装失败留下的Puppeteer目录删掉,避免干扰:
sudo rm -rf /usr/local/lib/node_modules/puppeteer
第二步:修复npm全局目录的权限(关键!)
不要用sudo su来安装全局npm包,这会让全局目录的所有者变成root,后续各种权限坑。咱们把npm全局目录的所有权改回当前用户:
- 先确认npm全局路径:
正常输出应该是npm config get prefix/usr/local - 修改目录所有者:
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
第三步:重新全局安装Puppeteer
现在不需要用sudo,直接执行安装命令(如果你的全局npm配置已经设置了PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true,可以直接跑下面的命令;如果没设置,就把变量加在命令前面):
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm install -g puppeteer
第四步:验证安装成功
运行下面的命令确认Puppeteer安装成功:
puppeteer --version
或者写个简单的测试脚本(比如test.js):
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ executablePath: '/Applications/Chromium.app/Contents/MacOS/Chromium' }); const page = await browser.newPage(); await page.goto('https://example.com'); await page.screenshot({ path: 'example.png' }); await browser.close(); })();
运行脚本:node test.js,如果能生成截图就说明一切正常啦~
额外建议:用nvm管理Node版本
如果以后还遇到类似的全局包权限问题,推荐用nvm(Node Version Manager)来管理Node.js版本。nvm会把Node和全局npm包都安装在你的用户目录下,完全绕开系统级的权限限制,省心很多。
内容的提问来源于stack exchange,提问作者Maguy IB
相关产品推荐
相关产品推荐

