【问题标题】:Can't install PagedJS due to a Puppeteer issue由于 Puppeteer 问题,无法安装 PagedJS
【发布时间】:2021-12-06 10:53:56
【问题描述】:

当我尝试使用推荐的npm install -g pagedjs-cli pagedjs install PagedJS 时,我得到:

npm WARN deprecated @babel/polyfill@7.12.1: ???? This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when neded). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.
npm WARN deprecated core-js@2.6.12: core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 enginewhims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.
npm ERR! code 1
npm ERR! path /root/.nvm/versions/node/v14.17.5/lib/node_modules/pagedjs-cli/node_modules/puppeteer
npm ERR! command failed
npm ERR! command sh -c node install.js
npm ERR! internal/modules/cjs/loader.js:905
npm ERR!   throw err;
npm ERR!   ^
npm ERR!
npm ERR! Error: Cannot find module '/root/.nvm/versions/node/v14.17.5/lib/node_modules/pagedjs-cli/node_modules/puppeteer/install.js'
npm ERR!     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15)
npm ERR!     at Function.Module._load (internal/modules/cjs/loader.js:746:27)
npm ERR!     at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
npm ERR!     at internal/main/run_main_module.js:17:47 {
npm ERR!   code: 'MODULE_NOT_FOUND',
npm ERR!   requireStack: []
npm ERR! }

如果我运行npm install -g puppeteer,我会得到完全相同的错误(减去警告)。

我尝试使用 npm install pagedjs-cli pagedjs 进行本地安装,一切正常(当我运行 npm ls 时,我得到:

├── pagedjs-cli@0.1.6
├── pagedjs@0.2.0
└── puppeteer@10.4.0

这似乎表明相关软件包已成功安装在本地)。但是当我尝试使用 npx pagedjs-cli example.html -o result.pdf 运行 PagedJS 时,我得到:

Loading: example.htmlError: Failed to launch the browser process!
/home/sophivorus/node_modules/puppeteer/.local-chromium/linux-901912/chrome-linux/chrome: error while loading shared libraries: libatk-bridge-2.0.so.0: cannot open shared object file: No such file or directory

TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md
    at onClose (/home/sophivorus/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:197:20)
    at Interface.<anonymous> (/home/sophivorus/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:187:68)
    at Interface.emit (events.js:412:35)
    at Interface.close (readline.js:530:8)
    at Socket.onend (readline.js:254:10)
    at Socket.emit (events.js:412:35)
    at endReadableNT (internal/streams/readable.js:1334:12)
    at processTicksAndRejections (internal/process/task_queues.js:82:21)

然后我尝试使用 yum install libatk-bridge-2.0.so.0 安装缺少的库,一切正常(当我运行 ldconfig -p | grep libatk-bridge-2.0.so.0 时,我得到:

libatk-bridge-2.0.so.0 (libc6) => /lib/libatk-bridge-2.0.so.0

这似乎表明该库已成功安装)。但是,当我重试npx pagedjs-cli example.html -o result.pdf 时,我得到了完全相同的错误。如果我用/home/sophivorus/node_modules/.bin/pagedjs-cli example.html -o result.pdf 避免npx,我会得到同样的错误。

我在 CentOS 7 上运行最新的节点和 npm:

node -v
v17.0.1

npm -v
8.1.0

我也尝试过使用最新的 LTS 版本。感谢您的帮助!

【问题讨论】:

  • 小笨蛋因为赏金:那不再是最新的节点了。这是当前的 LTS 版本(或者,足够接近;在发表此评论时,最新的 LTS 版本是 v14.18.1)。如果您使用nvm install latest 安装(因为您的日志显示您正在使用 nvm),您将获得 v17.0.1 - 因此,既然 Node 已经升级了三个主要版本(并且所有依赖项可能都在狂野上),可能需要重新测试所有内容现在也有不同的版本)。
  • @Mike'Pomax'Kamermans 谢谢!我刚刚将 node 和 nvm 更新到最新并重新测试了所有内容。恐怕没有任何改变,但我用这些新信息更新了我的问题。

标签: node.js npm puppeteer npx pagedjs


【解决方案1】:

包有另一个名字...

repoquery --list at-spi2-atk.x86_64

liblib64 不是一回事:

  • ldd /usr/lib64/libatk-bridge-2.0.so.0.0.0
  • ldd /lib/libatk-bridge-2.0.so.0

【讨论】:

  • 非常感谢您的洞察!我不确定我是否理解你,你的意思是说当我运行yum install libatk-bridge-2.0.so.0 时我安装了库的 /lib 版本,但 PagedJS 需要 /lib64(反之亦然)?你知道我应该运行什么命令来安装正确的库吗?我尝试了一些东西,但还没有看到光明。再次感谢!!
  • 我只是要求它:yum whatprovides */libatk-bridge-2.0.so.0 ...无法通过文件名安装包,但显然必须提供包名。它是包管理器,而不是文件管理器...
  • 谢谢!该命令帮助我安装了正确的软件包。之后发生了类似的错误,但您的命令也帮助我克服了它。然后发生了一个不同的错误,但我能够解决它。总的来说,你的回答和评论让我解决了这个问题,所以我给你赏金。再次感谢!
【解决方案2】:

您尝试使用的库 (pagedjs) 似乎非常不完整,它基于其他库的过时和弃用版本,并且仅由一名开发人员维护。它总共只有大约 100 个提交。我建议切换到jsPDF。它有超过 4000 个分叉,我对提交完全保持沉默。它得到积极维护并且非常受欢迎。尽管如此,这只是我发现的第一个。也许你能找到更好的库...

这个问题也可能对您有所帮助: Generate pdf from HTML in div using Javascript

【讨论】:

  • 这是一个好主意,如果我用 PagedJS 碰壁,我实际上可能最终会使用 jsPDF,但幸运的是,由于另一个答案,我才让它工作,所以我会给它一个机会。谢谢!
猜你喜欢
  • 2020-08-29
  • 1970-01-01
  • 2023-02-08
  • 2014-03-07
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 2023-04-03
相关资源
最近更新 更多