node.js编译的pkg无法运行(但从节点运行)

时间:2018-09-28 18:42:47

标签: javascript node.js

我有一个与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

非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

调试此代码,发现屏幕截图流模块使用

path.join(__dirname, 'stream.js')

作为参数传递,以将phantomjs作为子进程调用。

直接在节点上运行可以正常工作,但是使用pkg进行编译时,此子进程无法访问此打包程序创建的快照文件系统。

我找到了一种解决方法:修改screenshot-stream / index.js:

第45行:

__dirname替换为'./',并将stream.js放在二进制工作目录上,并且应该可以正常工作。