我有一个与node.js一起使用的简单程序,其想法是获取一些网站并显示报告,用于在公司中测试Web内容过滤。
我开始努力获取网站的屏幕快照,当我以node index.js
运行代码时,它可以正常运行,它输出'google.png'并包含网站的屏幕快照(就像屏幕快照中的-流示例)。但是,我使用npx pkg index.js -t linux
对其进行了编译,并且开始出现执行错误。
我将程序缩小为:
const fs = require('fs')
const screenshot = require('screenshot-stream');
const stream = screenshot('http://google.com', '900x180', {crop: true});
stream.pipe(fs.createWriteStream('google.png'));
我运行node index.js
并生成图像。但是,编译后(并将phantomjs添加到npx警告的phantom文件夹中),我得到一个错误:
./index
events.js:183
throw er; // Unhandled 'error' event
^
Error: Can't open '/snapshot/screenshots/node_modules/screenshot-stream/stream.js'
at LineStream.module.exports.byline.on.data (/snapshot/screenshots/node_modules/screenshot-stream/index.js:77:16)
at emitOne (events.js:116:13)
at LineStream.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
at LineStream.Readable.push (_stream_readable.js:208:10)
at LineStream.Transform.push (_stream_transform.js:147:32)
at LineStream._pushBuffer (/snapshot/screenshots/node_modules/byline/lib/byline.js:125:17)
at LineStream._transform (/snapshot/screenshots/node_modules/byline/lib/byline.js:116:8)
at LineStream.Transform._read (_stream_transform.js:186:10)
我正在使用screenshot-stream @ 4.2.0,npm @ 6.4.1,pkg @ 4.3.4
非常感谢您的帮助
答案 0 :(得分:1)
调试此代码,发现屏幕截图流模块使用
path.join(__dirname, 'stream.js')
作为参数传递,以将phantomjs作为子进程调用。
直接在节点上运行可以正常工作,但是使用pkg进行编译时,此子进程无法访问此打包程序创建的快照文件系统。
我找到了一种解决方法:修改screenshot-stream / index.js:
第45行:
将__dirname
替换为'./'
,并将stream.js放在二进制工作目录上,并且应该可以正常工作。