[英]node.js compiled pkg won't run (but does from node)
我有一個使用 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
任何幫助是極大的贊賞
調試了這段代碼,發現 screenshot-stream 模塊使用了
path.join(__dirname, 'stream.js')
作為參數傳遞以將 phantomjs 作為子進程調用。
當直接在節點上運行時,這工作正常,但是當使用 pkg 編譯時,這個子進程無法訪問由這個打包器創建的快照文件系統。
我找到了一個解決方法:修改 screenshot-stream/index.js:
在第 45 行:
用'./'
替換__dirname
並將 stream.js 放在二進制工作目錄中,應該可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.