使用 pkg 打包到可执行文件时,Node JS cli 脚本崩溃

Node JS cli script crashing when packaged to a executable with pkg

一个非常简单的 Web 自动化脚本,用于使用 puppeteer 填写表单,在我的 IDE 中完美运行,当我 运行 使用 node filename.js

但是当我用 pkg 将它打包成可执行文件时,它在输入的第一个实例上崩溃而没有抛出任何错误,我不希望直接解决这个问题,但也许有人有类似的经历,可以告诉我可能是什么原因造成的,因为我现在不知道该怎么做。

代码:

    const puppeteer = require('./node_modules/puppeteer')

const parse = require('csv-parse');
const fs = require('fs');
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

const data = [];

menu()

async function menu() {
    console.log("Please select a option\n\n" +
    "1. The Streets raffle\n" +
    "2. Footshop raffle\n" +
    "3. Exit");
    rl.question("", async function(answer) {
        console.log(`user choice: ${answer}`);

        if(answer === "1") {
            console.log("streets module starting");
            await streets_module();
        }
        else if(answer === "2") {
            console.log("In development, press enter to exit");
            rl.question("", async function(answer) {
            });
            rl.close;
            process.exit(0);
        }
        else if(answer === "3"){
            console.log("Now exitting...");
            rl.close;
            process.exit(0);
        }
        else {
            console.log("undefined choice, exitting...");
            rl.close;
            process.exit(0);
        }
        
    });
}

async function streets_module() {
    fs.createReadStream("profiles.csv") // this part can be omitted and instead the array from below can be assigned to the data variable
    .pipe(parse({ delimiter: ',' }))
    .on('data', (r) => {
        //console.log("r: ", r);
        data.push(r);        
    })
    .on('end', async () => {
        //console.log("data: ",data);
        //console.log("data at 1: ", data[1][0]); // prvy profil

        console.log("data length: ", data.length, data);

        for (let ii = 1; ii < data.length; ii++) {
            //console.log("this triggered");
            //C:\chrome-win\chrome.exe
            //console.log("async block triggered");
            console.log(`profile ${ii} started`)
            const browser = await puppeteer.launch({ignoreDefaultArgs: ['--disable-extensions']});
            const page = await browser.newPage();
            await page.goto('https://www.thestreets.sk/online-raffle/');
            await page.type("#name", data[ii][0]); // ,{ delay: 100 });
            await page.type("#yourEmail", data[ii][1]);//, { delay: 100 });
            await page.type("#phone", data[ii][2]);//, { delay: 100 });
            await page.type("#street", data[ii][3]);//, { delay: 100 });
            await page.type("#city", data[ii][4]);//, { delay: 100 });
            await page.type("#psc", data[ii][5]);//, { delay: 100 });
            await page.select('select#state', data[ii][6]);//, { delay: 100 }); 
            await page.select('select#prefered_size_sel', data[ii][7]);//, { delay: 100 });
            await page.$eval('input[name="agreed_personal_info_tiny_contact_form"]', check => check.checked = true);
        
        
            await page.screenshot({ path: 'streets' + ii + '.png' });
        
            await page.click('input[name="submit"]');
            
            //console.log("async block finished");
            console.log(`profile ${ii} finished`);
            await browser.close();
        }
        console.log("all profiles traversed, closing...");
        process.exit(0);
    })
    
}

csv 文件包含一些测试数据以查看表单是否正确填写,这里是用于测试目的的数组中的数据:

    [
  [
    'Full name',
    'Email',
    'Phone number',
    'Street',
    'City',
    'Postal code',
    'State',
    'Size'
  ],
  [
    'test',
    'test@test.com',
    '090123456789',
    'ulica',
    'Presov',
    '10902',
    'SVK',
    '5W'
  ],
  [
    'test 2',
    'test2@test.com',
    '090123452789',
    'ulica2',
    'Presov2',
    '10903',
    'SVK',
    '6W'
  ]
]

问题视频: a video showcase of the issue

感谢您走到这一步,并感谢您就 exe 文件崩溃的原因提出任何可能的建议:)

尝试用绝对路径替换 csv 文件名,以防访问它的目录不同