Linux下安装html-pdf报“PhantomJS not found on PATH”错误的解决办法
通过 html-pdf 工具将 HTML 文件转换为 PDF 文件;该工具依赖 phantomjs-prebuilt 包装器;phantomjs-prebuilt 用于从 npm 安装 PhantomJS 库;当安装 html-pdf 时,默认会包含此依赖项。
然而,安装html-pdf插件的时候遇到了phantomjs-prebuilt装不上的问题:
[root@localhost PROJECTSERVICE]# npm install html-pdf --save
> phantomjs-prebuilt@2.1.16 install /pathto/PROJECTSERVICE/node_modules/phantomjs-prebuilt
> node install.js
PhantomJS not found on PATH
Download already available at /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
Verified checksum of previously downloaded file
Extracting tar contents (via spawned process)
Removing /pathto/PROJECTSERVICE/node_modules/phantomjs-prebuilt/lib/phantom
Copying extracted folder /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1544582492513/phantomjs-2.1.1-linux-x86_64 -> /pathto/PROJECTSERVICE/node_modules/phantomjs-prebuilt/lib/phantom
chmod failed: phantomjs was not successfully copied to /pathto/PROJECTSERVICE/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! phantomjs-prebuilt@2.1.16 install: `node install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the phantomjs-prebuilt@2.1.16 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-12-12T02_41_36_373Z-debug.log
在尝试安装phantomjs-prebuilt时出现错误信息,在项目根目录中运行命令npm install phantomjs-prebuilt --save后仍然遇到相同问题。接着往下阅读相关内容。
PhantomJS未被PATH环境变量识别
注意到某个地方出现红色标记后提示无法完成复制操作后,在临时目录下的一个子目录中发现了 phantomjs 软件包及其压缩版本,并试图按照其内部路径进行复制操作;然而由于之前尝试安装时未成功,在 node_modules 目录中找不到预构建好的 phantomjs 软件包
尝试过程
一、
第一步:在git下面找phantomjs-prebuilt,看到了两种安装方式:

由于第一种方案不可行,则考虑第二种方法。首先下载zip文件并解压它;接着将解压好的zip文件复制到node_modules目录中,并将其重命名为phantomjs-prebuilt。
第二步:通过cd命令切换到phantomjs-prebuilt目录;运行node命令并执行install.js文件;遇到错误提示显示缺少必要的模块依赖项,请安装完成后即可继续进行下一步操作;随后调用html-pdf相关的代码;发现可以直接使用该功能。
二、
通过百度了解到一个方法:使用命令npm install phantomjs-prebuilt@version --ignore-scripts即可完成安装。参考上述信息得知版本号为2.1.16,请随后进行如下操作:npm install phantomjs-prebuilt@2.1.16 --ignore-scripts。此次操作未产生任何错误信息。
第二步:同上第二步。
三、
第一步:同上第一步。
在项目根目录中执行mv tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1544582492513/phantomjs-2.1.1-linux-x86_64/bin/phantomjs命令操作即可完成文件移动任务。
随后,在node_modules目录下的phantomjs-prebuilt/bin目录中创建新的 phantomjs 文件,并将该文件加入项目的构建队列。
接着,在项目代码中找到pdf转换相关的options配置对象,并对其中的 phantomPath 属性设置进行修改。
最后,在options配置对象中指定 phantomPath 属性值时应指定指向node_modules下的phantomjs-prebuilt/bin目录中的 phantomjs 文件路径。
